|
用oled和ds1302搞了個(gè)半成品時(shí)鐘(只能夠看時(shí)間和溫度不能調(diào)時(shí)間),然后我在我的STC89c52的單片機(jī)開(kāi)發(fā)板上實(shí)驗(yàn)成功了,結(jié)果換到STC15W408AS上就出現(xiàn)了時(shí)間顯示亂碼和TT
補(bǔ)充:我把ds18b20和ds1302的程序全換成1T的了,不知道是不是改了以后ds1302的程序有bug。。。。。。
IMG_20190126_010647.jpg (986.84 KB, 下載次數(shù): 39)
下載附件
2019-1-26 01:09 上傳
IMG_20190126_010742.jpg (881.47 KB, 下載次數(shù): 32)
下載附件
2019-1-26 01:09 上傳
- #include "stc15f2k60s2.h"
- #include "intrins.h"
- #include "codetab.h"
- #include "LQ12864.h"
- #include "ds1302.h"
- #include "ds18b20.h"
- unsigned char code Address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時(shí)日月周年 最低位讀寫(xiě)位 讀+1;寫(xiě)不加
- unsigned char code Table[12]="0123456789:-";
- unsigned char code Week[7][3]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
- unsigned char database[9];//時(shí)鐘寄存器(時(shí)分秒)
- unsigned char Date[11];//日期寄存器(年月日)
- unsigned char Weekend[4];//星期寄存器
- unsigned char Temperature[7];//溫度寄存器
- unsigned char l[7]={00,39,13,23,1,3,19};//秒分時(shí)日月周年08-05-15 12:00:00
- unsigned int temper;
- unsigned char Bits;//修改時(shí)間標(biāo)志位
- unsigned char Bist[2];
- void SetRTC() /*設(shè)置時(shí)間*/
- {
- unsigned char i,tmp,*p;
- for(i=0;i<7;i++)
- {
- tmp=l[i]/10;
- l[i]=l[i]%10;
- l[i]=l[i]+tmp*16;
- }
- WriteData(0x8e,0x00);
- p=Address;
- for(i=0;i<7;i++)
- {
- WriteData(*p,l[i]);
- p++;
- }
- WriteData(0x8e,0x80);
- }
- void ReadRTC() /*讀時(shí)鐘*/
- {
- unsigned char i,*p;
- p=Address;
- for(i=0;i<7;i++)
- {
- l[i]=ReadData(*p+1);
- p++;
- }
- }
- void DisplayRTC()
- {
- database[0]=Table[l[2]/16];
- database[1]=Table[l[2]&0x0f];
- database[2]=Table[10];
- database[3]=Table[l[1]/16];
- database[4]=Table[l[1]&0x0f];
- database[5]=Table[10];
- database[6]=Table[l[0]/16];
- database[7]=Table[l[0]&0x0f];
- Date[0]=Table[2];
- Date[1]=Table[0];
- Date[2]=Table[l[6]/16];
- Date[3]=Table[l[6]&0x0f];
- Date[4]=Table[11];
- Date[5]=Table[l[4]/16];
- Date[6]=Table[l[4]&0x0f];
- Date[7]=Table[11];
- Date[8]=Table[l[3]/16];
- Date[9]=Table[l[3]&0x0f];
- Weekend[0]=Week[l[5]-1][0];
- Weekend[1]=Week[l[5]-1][1];
- Weekend[2]=Week[l[5]-1][2];
- Temperature[0]=Table[temper/100];
- Temperature[1]=Table[temper%100/10];
- Temperature[2]='.';
- Temperature[3]=Table[temper%10];
- Temperature[4]='^';
- Temperature[5]='C';
- Bist[0]=Table[Bits];
- OLED_P8x16Str(32,2,database);
- OLED_P8x16Str(16,4,Date);
- OLED_P8x16Str(8,6,Weekend);
- OLED_P8x16Str(64,6,Temperature);
- OLED_P6x8Str(112,4,Bist);
- }
- void Tempchange()
- {
- DS18B20_Reset(); //設(shè)備復(fù)位
- DS18B20_WriteByte(0xCC); //跳過(guò)ROM命令
- DS18B20_WriteByte(0x44); //開(kāi)始轉(zhuǎn)換命令
- // while (!DQ); //等待轉(zhuǎn)換完成
- }
- unsigned int Tempread()
- {
- unsigned char TPH,TPL; //存放溫度值的高字節(jié)
- unsigned int temp;
- float tt;
- DS18B20_Reset(); //設(shè)備復(fù)位
- DS18B20_WriteByte(0xCC); //跳過(guò)ROM命令
- DS18B20_WriteByte(0xBE); //讀暫存存儲(chǔ)器命令
- TPL = DS18B20_ReadByte(); //讀溫度低字節(jié)
- TPH = DS18B20_ReadByte(); //讀溫度高字節(jié)
- temp=TPH;
- temp<<=8;
- temp=temp|TPL;
- tt=temp*0.0625;
- temp=tt*10+0.5;
- return(temp);
- }
- void main()
- {
- unsigned char i;
- database[8]='\0';
- Date[10]='\0';
- Weekend[3]='\0';
- Temperature[6]='\0';
- Bist[1]='\0';
- OLED_Init();
- //SetRTC();
- for(i=0;i<8;i++)
- {
- OLED_P16x16Ch(i*16,0,i);
- }
- while(1)
- {
- unsigned char k;
- Tempchange();
- for(k=0;k<25;k++)
- {
- ReadRTC();
- DisplayRTC();
- }
- temper=Tempread();
- }
- }
復(fù)制代碼 |
-
-
omega.zip
2019-1-26 01:16 上傳
點(diǎn)擊文件名下載附件
5.75 KB, 下載次數(shù): 40
|