首页 > 编程知识 正文

单片机原理及应用,基于单片机的电子时钟设计

时间:2023-05-05 22:20:55 阅读:112239 作者:2844

基于51单片机的多功能温度监测系统该博客采用HC6800-EM3开发板(普通科技51单片机开发板)构建多功能温度监测系统,具体功能如下:

键1是系统开关,按下键1时,单片机开始工作,再按一次,系统停止工作; 键key2打开实时检测温度模式,每秒检测一次DS18B20温度传感器的温度,并将温度显示在LCD1602的显示器上; 按key3键,每秒记录一次温度值,连续记忆10次。 也就是说,会存储这10秒钟的温度值。 按下键key4、key5,读取按下key3时存储的温度。 key4表示被存储之前的温度,key5表示被存储的下一个温度。 按键6清除记录的温度; 随时温度超过37,系统报警(指示灯持续闪烁);

HC6800-EM3开发板图片来源:单片机已经有程序了,请不要

代码如下。

#include 'reg51.h' //此文件定义了在单片机的几个特殊功能寄存器#include 'lcd1602.h' //lcd1602中显示的函数,其中包括LCD sbit k1=P1^0;//定义6个独立按钮sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; sbit k5=P1^4; sbit k6=P1^5; sbit led=P2^3; //led灯int f; //转换前的温度值unsigned int temp; //变换后温度值、单位表示保留2位小数,因此该值为100倍的温度值char state=0; //0关闭,1为无符号字符液晶屏[ 11 ]; //存储液晶屏上显示的未指定的char LCD _ data [9] [5]; //保存记录10次的温度值char key_state=0该值为1,开启实时显示温度模式char local=1; //读取存储的温度时,读取第local个值voiddelay(u16I ) /延迟函数,延迟时间短,led闪烁时{while ) I--}; ) }void Delay1s ()//延迟函数在延迟时间长、key3记录10秒10次温度时({unsigned char i,j,k; i=21; j=12; k=155; do{do{while (--k ); (while(-j ); (while(--I ); () () () () ) ) ) ) () () ) ) ) ) ) ) ) 652 * * * * * * * * * * * * * * * * * * * * * * * * * * * () //抖动校正处理if(k1==0) key1被按下时,切换动作状态,(on/off ) {TR0=0; if(state==0) {key_state=0; 状态=1液晶屏[0]='0'; 液晶屏[1]='0'; 液晶屏[2]='.'; 液晶屏[3]='0'; 液晶屏[4]='0'; 液晶屏[5]='; 液晶显示器(0,0,LCD ); //状态打开,00.00}else {key_state=0; state=0液晶屏[0]='; 液晶屏[1]='; 液晶屏[2]='; 液晶屏[3]='; 液晶屏[4]='; 液晶屏[5]='; 液晶显示器(0,0,LCD ); //状态关闭,隐藏}}while (! k1; (if ) k2==0)当key2被按下时,key_state切换状态,接通/断开,key_state接通时)1),计时器中断动作,每秒温度值) delay () //抖动校正处理if(K2==0) if ) state==1) if ) key_state==0) {key_state=1; //key_state=1打开实时计数,否则停止实时计数}else{key_state=0; }}}while (! k2 ); (if ) k3==0)//key3按下时,记录10次温度值,存储在二维排列lcd_data中) delay ) 1000 ); //抖动校正处理if(k3==0) {TR0=0; key_state=0; if(state==1) {for ) n=1; n=10; n () { f=d s18 b 20读取时间); 读取DS18B20温度10次,temp=f*0.0625*100 0.5; 液晶屏[0]=temp % 10000/1000 '0'; 液晶屏[1]=temp % 1000/100 '0'; 液晶屏[2]='。

';lcd[3] = temp % 100 / 10+'0';lcd[4] = temp % 10+'0';LCD_Display(0,0,lcd);//显示第10个数if(temp>=3700){while(1){delay(50000);led=~led;}}lcd_data[n-1][0] = lcd[0];lcd_data[n-1][1] = lcd[1];lcd_data[n-1][2] = lcd[2];lcd_data[n-1][3] = lcd[3];lcd_data[n-1][4] = lcd[4];Delay1s();}}}while(!k3);}if(k4==0)//k4按下时,将存储的温度值用LCD1602显示,每按一下,local值减1,表示显示上一个存储的值{delay(1000); //消抖处理if(k4==0){TR0=0; key_state=0;if(state==1){if(local==10){local=1;}else{local=local+1;}lcd[0] = lcd_data[local-1][0];lcd[1] = lcd_data[local-1][1];lcd[2] = lcd_data[local-1][2];lcd[3] = lcd_data[local-1][3];lcd[4] = lcd_data[local-1][4];LCD_Display(0,0,lcd);//显示}}while(!k4);}if(k5==0)//k5按下时,将存储的温度值用LCD1602显示,每按一下,local值加1,表示显示下一个存储的值{delay(1000); //消抖处理if(k5==0){TR0=0; key_state=0;if(state==1){if(local==1){local=10;}else{local=local-1;}lcd[0] = lcd_data[local-1][0];lcd[1] = lcd_data[local-1][1];lcd[2] = lcd_data[local-1][2];lcd[3] = lcd_data[local-1][3];lcd[4] = lcd_data[local-1][4];LCD_Display(0,0,lcd);//显示}}while(!k5);}if(k6==0)//k6按下时,存储的值全部清0{delay(1000); //消抖处理if(k6==0){TR0=0; key_state=0;for(n=1;n<=10;n++){lcd[0] = '0';lcd[1] = '0';lcd[2] = '.';lcd[3] = '0';lcd[4] = '0';lcd_data[n-1][0] = lcd[0];lcd_data[n-1][1] = lcd[1];lcd_data[n-1][2] = lcd[2];lcd_data[n-1][3] = lcd[3];lcd_data[n-1][4] = lcd[4];}LCD_Display(0,0,lcd); //显示00.00}while(!k6);}}void Timer0Init(){TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。TH0=0XFC;//给定时器赋初值,定时1msTL0=0X18;ET0=1;//打开定时器0中断允许EA=1;//打开总中断TR0=1;//打开定时器}void T0Function() interrupt 1 //定时器中断,key2按下时,开启定时器中断,每秒检测显示一次温度{static int m=0; if(m<500){m++;}else{TR0=0;//定时器中断会干扰DS18B20的读取,因此读取时关闭定时器中断f=Ds18b20ReadTemp(); //读取10次DS18B20的温度,写进去temp=f*0.0625*100+0.5;lcd[0] = temp % 10000 / 1000+'0';lcd[1] = temp % 1000 / 100+'0';lcd[2] = '.';lcd[3] = temp % 100 / 10+'0';lcd[4] = temp % 10+'0';LCD_Display(0,0,lcd);//显示第10个数if(temp>=3700)//温度超过37时,led闪烁报警{while(1){delay(50000);led=~led;}}m=0;TR0=1;}TH0=0XFC;//给定时器赋初值,定时1ms TL0=0X18;}void main()//主函数{LCD_Init();//LCD1602初始化led = 0;Timer0Init();//T0定时器中断EA=1;TR0=0;f==Ds18b20ReadTemp();while(1){if(key_state==1)//是否实时显示?{TR0=1;}else{TR0=0;}Keypros();//按键检测}} 代码:

全部代码都在这篇博客了,里面#include的一些.h文件都是买板子的时候会有的驱动函数,网上都能搜到,都差不多;
有需要的可以下载包含.h文件的完整工程文件(含开发板原理图):基于51单片机的多功能温度监测系统

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。