|
12864液晶ds1302時(shí)間和ds18b20溫度程序仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (26.19 KB, 下載次數(shù): 73)
下載附件
2018-5-31 00:50 上傳
0.png (52.46 KB, 下載次數(shù): 64)
下載附件
2018-5-31 00:51 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #include <ds18b20.h>
- #include <word.h>
- #include <12864display.h>
- #include <ds1302.h>
- //聲明外部溫度讀數(shù)數(shù)組
- extern unsigned char data temperature[2];
- //聲明外部高低溫報(bào)警
- extern char Alarm_Temp_HL[2];
- //存放分解的7個(gè)ASCII碼溫度數(shù)據(jù)
- unsigned char temp[7];
- bit HI_Alarm = 0,LO_Alarm = 0; //高溫低溫報(bào)警標(biāo)志位
- sbit HI_LED = P1^4; //高溫報(bào)警燈
- sbit LO_LED = P1^5; //低溫報(bào)警燈
- sbit BUZZER = P2^6; //喇叭
- sbit button = P1^0; //按鈕切換顯示
- sbit button_shi=P1^1; //調(diào)節(jié)時(shí)
- sbit button_fen=P1^2; //分
- sbit button_miao=P1^3; //秒
- sbit button_year=P1^6; //年
- sbit button_month=P1^7; //月
- sbit button_day=P3^0; //日
- sbit button_week=P3^7; //星期
- //按鈕的7個(gè)變量
- unsigned char count1,count2,count3,count4,count5,count6,count7;
- //根據(jù)輸入的tem在12864的第1行的pos位置顯示相應(yīng)的0~9
- void trans(unsigned char hang,unsigned char tem,unsigned int pos)
- {
- switch(tem)
- {
- case '0':vShowOneChar(hang,pos,uca_0);break;
- case '1':vShowOneChar(hang,pos,uca_1);break;
- case '2':vShowOneChar(hang,pos,uca_2);break;
- case '3':vShowOneChar(hang,pos,uca_3);break;
- case '4':vShowOneChar(hang,pos,uca_4);break;
- case '5':vShowOneChar(hang,pos,uca_5);break;
- case '6':vShowOneChar(hang,pos,uca_6);break;
- case '7':vShowOneChar(hang,pos,uca_7);break;
- case '8':vShowOneChar(hang,pos,uca_8);break;
- case '9':vShowOneChar(hang,pos,uca_9);break;
- default:break;
- }
- }
- //l2864顯示
- void display()
- {
- unsigned char temp_data,temp_data2;
- unsigned int TempDec; //用來存放4位小數(shù)
- temp_data = temperature[1]&0xf8;//取高5位
-
- if (temp_data==0xf8) //負(fù)溫度讀數(shù)
- {
- temperature[0]=~temperature[0]+1;
- temperature[1]=~temperature[1];
- if (temperature[0]==0x00)
- temperature[1]++;
- temp_data = (temperature[1]&0x07)<<4; //取高字節(jié)低3位(溫度讀數(shù)高3位)
- temp_data2 = (temperature[0]&0xf0)>>4; //取低字節(jié)高4位(溫度讀數(shù)低4位)
- temp_data= temp_data|temp_data2; //組合成完整數(shù)據(jù)
- if(temp_data>=Alarm_Temp_HL[1])
- {
- TF0=1;
- LO_Alarm=1;
- HI_Alarm=0;
- }
- else
- {
- TF0=1;
- LO_Alarm=0;
- HI_Alarm=0;
- }
- vShowOneChar(0,40,uca_fu);
- }
- else
- {
- temp_data = (temperature[1]&0x07)<<4; //取高字節(jié)低3位(溫度讀數(shù)高3位)
- temp_data2 = (temperature[0]&0xf0)>>4; //取低字節(jié)高4位(溫度讀數(shù)低4位)
- temp_data= temp_data|temp_data2; //組合成完整數(shù)據(jù)
- if(temp_data>=Alarm_Temp_HL[0])
- {
- TF0=1;
- HI_Alarm=1;
- LO_Alarm=0;
- }
- else
- {
- TF0=1;
- HI_Alarm=0;
- LO_Alarm=0;
- }
- vShowOneChar(0,40,uca_zheng);
- }
- temp[0] = temp_data/100+0x30; //取百位轉(zhuǎn)換為ASCII碼
- temp[1] = (temp_data%100)/10+0x30; //取十位轉(zhuǎn)換為ASCII碼
- temp[2] = (temp_data%100)%10+0x30; //取個(gè)位轉(zhuǎn)換為ASCII碼
- temperature[0]&=0x0f; //取小數(shù)位轉(zhuǎn)換為ASCII碼
- TempDec = (temperature[0]*0.0625)*10000;//小數(shù)部分,擴(kuò)大1萬倍,1/16,最低分辨率 取四位小數(shù)
- temp[3] = TempDec/1000+0x30; //取小數(shù)個(gè)位轉(zhuǎn)換為ASCII碼
- temp[4] = (TempDec%1000)/100+0x30; //取小數(shù)十位轉(zhuǎn)換為ASCII碼
- temp[5] = ((TempDec%1000)%100)/10+0x30;//取小數(shù)百位轉(zhuǎn)換為ASCII碼
- temp[6] = ((TempDec%1000)%100)%10+0x30;//取小數(shù)千位轉(zhuǎn)換為ASCII碼
- trans(0,temp[0],48);
- trans(0,temp[1],56);
- trans(0,temp[2],64);
- vShowOneChar(0,72,uca_dian); //小數(shù)點(diǎn)
- trans(0,temp[3],80);
- trans(0,temp[4],88);
- trans(0,temp[5],96);
- trans(0,temp[6],104);
- }
- //中斷,溫度過高過低對(duì)應(yīng)的燈亮
- void T0_INT() interrupt 1
- {
- TF0=0;
- if(HI_Alarm)
- {
- HI_LED=0;
- BUZZER=1;
- }
- else
- {
- HI_LED=1;
- }
- if(LO_Alarm)
- {
- LO_LED=0;
- BUZZER=1;
- }
- else
- {
- LO_LED=1;
- }
- }
- void show_time(unsigned char time,unsigned char hang,unsigned char pos1,unsigned char pos2)
- {
- unsigned char i,j;
- i=time/10+0x30;
- j=time%10+0x30;
- trans(hang,i,pos1);
- trans(hang,j,pos2);
- }
- //主函數(shù)
- void main()
- {
- unsigned char shi,fen,miao,year,month,day,week;
- DS1820_Reset();//DS1820初始化
- Set_Alarm_Temp_Value();
- IE=0x82;TMOD=0x02; //開中斷
- vLCDInitialize();
- delay100us();
- while(button==1)
- {
- vShowOneChin(6,16,uca_kb);
- vShowOneChin(6,32,uca_kb);
- vShowOneChin(6,80,uca_kb);
- vShowOneChin(6,96,uca_kb);
- vShowOneChin(4,32,uca_kb);
- vShowOneChin(4,48,uca_kb);
- vShowOneChin(4,64,uca_kb);
- vShowOneChin(4,80,uca_kb);
- vShowOneChin(4,16,uca_kb);
- vShowOneChin(4,96,uca_kb);
- vShowOneChin(2,32,uca_kb);
- vShowOneChin(2,48,uca_kb);
- vShowOneChin(2,64,uca_kb);
- vShowOneChin(2,80,uca_kb);
-
- vShowOneChin(0,0,uca_wen);
- vShowOneChin(0,16,uca_du);
- vShowOneChar(0,32,uca_mh);
- vShowOneChar(0,112,uca_o);
- vShowOneChar(0,120,uca_C);
- read_temp(); //讀取溫度值
- delay100us();
- display(); //顯示溫度值
- delay100us();
- BUZZER=0;
- }
-
- while(button==0)
- {
- //判斷按鍵
- if(button_shi==0)
- {
- while(button_shi==0);
- count1++;
- }
- if(button_fen==0)
- {
- while(button_fen==0);
- count2++;
- }
- if(button_miao==0)
- {
- while(button_miao==0);
- count3++;
- }
- if(button_year==0)
- {
- while(button_year==0);
- count4++;
- }
- if(button_month==0)
- {
- while(button_month==0);
- count5++;
- }
- if(button_day==0)
- {
- while(button_day==0);
- count6++;
- }
- if(button_week==0)
- {
- while(button_week==0);
- count7++;
- }
- shi=ReadSet1302(0x85);
- shi=((shi&0x70)>>4)*10+(shi&0x0f)+count1; //高三個(gè)字節(jié)是十位,低4個(gè)字節(jié)為個(gè)位
- if(shi>=24)
- shi=shi-24;
- fen=ReadSet1302(0x83);
- fen=((fen&0x70)>>4)*10+(fen&0x0f)+count2;
- if(fen>=60)
- fen=fen-60;
- miao=ReadSet1302(0x81);
- miao=((miao&0x70)>>4)*10+(miao&0x0f)+count3;
- if(miao>=60)
- miao=miao-60;
- year=ReadSet1302(0x8d);
- year=((year&0x70)>>4)*10+(year&0x0f)+count4;
- month=ReadSet1302(0x89);
- month=((month&0x70)>>4)*10+(month&0x0f)+count5;
- if(month>=13)
- month=month-12;
- day=ReadSet1302(0x87);
- day=((day&0x70)>>4)*10+(day&0x0f)+count6;
- if(day>=32)
- day=day-31;
- week=ReadSet1302(0x8b);
- week=((week&0x70)>>4)*10+(week&0x0f)+0x30+count7;
- if(week>=0x38)
- {
- week=week-0x07;
- count7=0;
- }
- if(week==0x31)
- week=week+6;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
12864ds1302時(shí)間和ds18b20溫度程序和仿真圖.zip
(235.82 KB, 下載次數(shù): 199)
2018-5-30 23:13 上傳
點(diǎn)擊文件名下載附件
12864ds1302時(shí)間和ds18b20溫度程序和仿真圖 下載積分: 黑幣 -5
|
|