当前位置: 首页> 财经> 访谈 > 安徽六安疫情风险等级_专业团队高清壁纸_百度联盟怎么赚钱_十大中文网站排名

安徽六安疫情风险等级_专业团队高清壁纸_百度联盟怎么赚钱_十大中文网站排名

时间:2025/7/21 10:30:01来源:https://blog.csdn.net/weixin_62565928/article/details/147124377 浏览次数:0次
安徽六安疫情风险等级_专业团队高清壁纸_百度联盟怎么赚钱_十大中文网站排名

试题

代码 

sys.h

#ifndef __SYS_H__
#define __SYS_H__#include <STC15F2K60S2.H>
//sys.c
extern unsigned char UI;					//界面标志(0湿度界面、1参数界面、2时间界面)
extern unsigned char time;				//时间间隔(1s~10S)
extern bit ssflag;								//启动/停止标志(0启动、1停止)
void init74hc138(unsigned char n);//译码器选通
void init();											//系统初始化
void relay(bit flag);							//继电器吸合控制
void led(unsigned char n);				//LED控制
void led_if();										//led指示灯
//iic.c
extern unsigned char shidu;						//湿度值
extern unsigned char shidu_canshu;		//湿度参数(30%~90%)
extern bit flag_relay;								//继电器状态
unsigned char adc(unsigned char addr);//模数转换选通
float get_Vrb2();											//获取RB2电压值
void get_shidu();											//RB2电压值转换为湿度数据
//seg_key.c
extern unsigned char Seg_Buff[8];//数码管缓存
void Key_Loop();								 //按键扫描
void Seg_Loop();								 //数码管刷新
void seg_ui();									 //界面选择
#endif

main.c

#include "sys.h"
bit flag_seg=0;
bit flag_key=0;
bit flag_shidu=0;
bit flag_relay_con=0;
void Timer0_Init(void)		//100微秒@12.000MHz
{AUXR |= 0x80;			//定时器时钟1T模式TMOD &= 0xF0;			//设置定时器模式TL0 = 0x50;				//设置定时初始值TH0 = 0xFB;				//设置定时初始值TF0 = 0;				//清除TF0标志TR0 = 1;				//定时器0开始计时ET0 = 1;				//使能定时器0中断EA = 1;
}
void main(){init();Timer0_Init();get_shidu();while(1){if(flag_seg){flag_seg=0;Seg_Loop();}if(flag_key){flag_key=0;Key_Loop();seg_ui();}if(flag_shidu){flag_shidu=0;get_shidu();seg_ui();}if(flag_relay_con){flag_relay_con=0;flag_relay=0;relay(0);}led_if();}
}
void Timer0_Isr(void) interrupt 1
{static unsigned char count1=0;static unsigned char count2=0;static unsigned int count3=0;static unsigned int count4=0;count1++;count2++;count3++;if(count1==2){count1=0;flag_seg=1;}if(count2==50){count2=0;flag_key=1;}if(count3==1000){count3=0;flag_shidu=1;}if(flag_relay){count4++;if(count4==((unsigned int)time*10000)){count4=0;flag_relay_con=1;}}
}

sys.c

#include "sys.h"
unsigned char UI=0;
unsigned char time=3;
bit ssflag=1;
void init74hc138(unsigned char n){P2=(P2&0x1f)|(n<<5);P2&=0x1f;
}
void init(){P0=0x00;init74hc138(5);P0=0xff;init74hc138(4);
}
void relay(bit flag){if(flag) P0=0x10;else P0=0x00;init74hc138(5);
}
void led(unsigned char n){P0=~(0x01<<(n-1));init74hc138(4);
}
void led_if(){switch(UI){case 0:led(1);break;case 1:led(2);break;case 2:led(3);break;}if(!ssflag) led(8);
}

seg_key.c

#include "sys.h"
sbit COL1=P4^4;
sbit COL2=P4^2;
sbit ROW3=P3^2;
sbit ROW4=P3^3;
code unsigned char Seg_Table[]={0xc0,//00xf9,//10xa4,//20xb0,//30x99,//40x92,//50x82,//60xf8,//70x80,//80x90,//90xc6,//C 100x86,//E 11 0x89,//H 120xff	//熄灭 13
};
unsigned char Seg_Buff[8]={13,13,13,13,13,13,13,13};
unsigned char keyval,keyold,keyup,keydown;
unsigned char key_scan(){COL1=0;COL2=1;if(ROW4==0) return 4;if(ROW3==0) return 5;COL1=1;COL2=0;if(ROW4==0) return 8;if(ROW3==0) return 9;return 0;
}
void Key_Loop(){keyval=key_scan();keydown=keyval&(keyold^keyval);keyup=~keyval&(keyold^keyval);//s4为界面切换按键if(keyval==4&&keyold!=4){UI++;if(UI==3) UI=0;}//s5为启动停止按键if(keyval==5&&keyold!=5){ssflag=!ssflag;}//s8为减按键if(keyval==8&&keyold!=8){if(UI==1){if(shidu_canshu>30)shidu_canshu-=5;elseshidu_canshu=90;}else if(UI==2){if(time>1)time--;elsetime=10;}}//s9为加按键if(keyval==9&&keyold!=9){if(UI==1){if(shidu_canshu<90)shidu_canshu+=5;elseshidu_canshu=30;}else if(UI==2){if(time<10)time++;elsetime=1;}}keyold=keyval;keyval=0;
}
void seg(unsigned char addr,num){P0=0xff;init74hc138(7);P0=0x01<<addr;init74hc138(6);P0=Seg_Table[num];init74hc138(7);
}
void Seg_Loop(){static unsigned char i=0;seg(i,Seg_Buff[i]);i++;if(i==8) i=0;
}
//湿度界面
void ui0(){Seg_Buff[7]=shidu%10;Seg_Buff[6]=shidu/10;Seg_Buff[5]=13;Seg_Buff[4]=13;Seg_Buff[3]=13;Seg_Buff[2]=13;Seg_Buff[1]=13;Seg_Buff[0]=10;//C
}
//参数界面
void ui1(){Seg_Buff[7]=shidu_canshu%10;Seg_Buff[6]=shidu_canshu/10;Seg_Buff[5]=13;Seg_Buff[4]=13;Seg_Buff[3]=13;Seg_Buff[2]=13;Seg_Buff[1]=13;Seg_Buff[0]=11;//E
}
//参数界面
void ui2(){Seg_Buff[7]=time%10;if(time<10)Seg_Buff[6]=13;elseSeg_Buff[6]=1;Seg_Buff[5]=13;Seg_Buff[4]=13;Seg_Buff[3]=13;Seg_Buff[2]=13;Seg_Buff[1]=13;Seg_Buff[0]=12;//H
}
void seg_ui(){switch(UI){case 0:ui0();break;case 1:ui1();break;case 2:ui2();break;}
}

ii.c

#include "sys.h"
#include "intrins.h"
#define DELAY_TIME	10
sbit scl=P2^0;
sbit sda=P2^1;
unsigned char shidu;
unsigned char shidu_canshu=50;
bit flag_relay=0;
static void I2C_Delay(unsigned char n)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();		}while(n--);      	
}
void I2CStart(void)
{sda = 1;scl = 1;I2C_Delay(DELAY_TIME);sda = 0;I2C_Delay(DELAY_TIME);scl = 0;    
}
void I2CStop(void)
{sda = 0;scl = 1;I2C_Delay(DELAY_TIME);sda = 1;I2C_Delay(DELAY_TIME);
}
void I2CSendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){scl = 0;I2C_Delay(DELAY_TIME);if(byt & 0x80){sda = 1;}else{sda = 0;}I2C_Delay(DELAY_TIME);scl = 1;byt <<= 1;I2C_Delay(DELAY_TIME);}scl = 0;  
}
unsigned char I2CReceiveByte(void)
{unsigned char da;unsigned char i;for(i=0;i<8;i++){   scl = 1;I2C_Delay(DELAY_TIME);da <<= 1;if(sda) da |= 0x01;scl = 0;I2C_Delay(DELAY_TIME);}return da;    
}
unsigned char I2CWaitAck(void)
{unsigned char ackbit;scl = 1;I2C_Delay(DELAY_TIME);ackbit = sda; scl = 0;I2C_Delay(DELAY_TIME);return ackbit;
}
void I2CSendAck(unsigned char ackbit)
{scl = 0;sda = ackbit; I2C_Delay(DELAY_TIME);scl = 1;I2C_Delay(DELAY_TIME);scl = 0; sda = 1;I2C_Delay(DELAY_TIME);
}
unsigned char adc(unsigned char addr){unsigned char temp;I2CStart();EA = 0;I2CSendByte(0x90);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CStart();I2CSendByte(0x91);I2CWaitAck();temp=I2CReceiveByte();I2CSendAck(1);I2CStop();EA = 1;return temp;
}
float get_Vrb2(){return (float)adc(3)/255.0*5.0;
}
void get_shidu(){ float temp;temp=get_Vrb2();if(temp<1.0){shidu=10;}else if(temp<=4){shidu=(unsigned char)(80.0/3.0*(temp-1)+10+0.5);}else{shidu=90;}if(ssflag){flag_relay=0;relay(0);}else{if(shidu<shidu_canshu&&!flag_relay){flag_relay=1;relay(1);}}
}

测评结果

尚待解决的问题

 最后一项测评一直不正确,在板子上显示正常。感谢各位大佬们批评指导

关键字:安徽六安疫情风险等级_专业团队高清壁纸_百度联盟怎么赚钱_十大中文网站排名

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: