附件proteus8.7版本的仿真圖keil4的程序文件,還可以顯示溫度,溫度代碼還在完善中
51公交車(chē)報(bào)站仿真可以顯示時(shí)間,自動(dòng)手動(dòng)報(bào)站顯示上行下行
2222222222222222222.png (55.97 KB, 下載次數(shù): 40)
下載附件
51公交車(chē)報(bào)站仿真可以顯示時(shí)間,自動(dòng)手動(dòng)報(bào)站顯示上行下行
2020-5-26 18:11 上傳
lcd12864可以顯示ds1302的時(shí)間可以通過(guò)三個(gè)按鍵調(diào)試時(shí)間
11111111111111.png (55.03 KB, 下載次數(shù): 40)
下載附件
lcd12864可以顯示ds1302的時(shí)間可以通過(guò)三個(gè)按鍵調(diào)試時(shí)間
2020-5-26 18:07 上傳
單片機(jī)源程序如下:
- /*
- * 功能:51公交車(chē)報(bào)站仿真
- *作者:?jiǎn)纹瑱C(jī)愛(ài)好者
- *
- */
- #include "main.h" //包含頭文件main.h
- #include "LCD.h" //包含頭文件LCD.h
- #include "DS1302.h" //包含頭文件DS1302.h
- #include "word.h" //包含頭文件word.h
- #include "lunar_calendar.h" //包含頭文件lunar_calendar.h
- #include "buzz.h" //包含頭文件buzz.h
- TIME time, tmp_time; //時(shí)間變量
- ALARM alarm; //時(shí)間變量
- bit Alarm_flag=0; //時(shí)間變量
- bit Clock_flag=0; //時(shí)間變量
- bit flag=0; //時(shí)間變量
- int8 flat=0;
- sbit DQ=P2^6; //DS18B20 pin 溫度傳感器引腳
- //*************上下行手動(dòng)自動(dòng)****************
- char code shang[]={
- /*-- 文字: 上 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00
- };
- char code xia[]={
- /*-- 文字: 下 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x42,0x82,0x02,0x02,0x02,0x02,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00
- };
- char code xing[]={
- /*-- 文字: 行 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x10,0x88,0xC4,0x33,0x00,0x40,0x42,0x42,0x42,0xC2,0x42,0x42,0x42,0x40,0x00,
- 0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00
- };
- char code shou[]={
- /*-- 文字: 手 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0x24,0x24,0x24,0x24,0x24,0xFC,0x22,0x22,0x22,0x23,0x22,0x00,0x00,0x00,
- 0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00
- };
- char code zi[]={
- /*-- 文字: 自 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00
- };
- char code dong[]={
- /*-- 文字: 動(dòng) --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00,
- 0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00
- };
- //****************************
- char code ming[]={
- /*-- 文字: 名 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x20,0x20,0x10,0x08,0x14,0x67,0x84,0x44,0x24,0x14,0x0C,0x00,0x00,0x00,0x00,
- 0x04,0x04,0x04,0x02,0xFE,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00
- };
- char code zhan[]={
- /*-- 文字: 站 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0xC8,0x08,0x09,0x0E,0xE8,0x08,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00,
- 0x10,0x30,0x17,0x10,0x0E,0x09,0x08,0xFF,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00
- };
- char code m[]={
- /*-- 文字: : --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- char code yi[]={
- /*-- 文字: 一 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- char code er[]={
- /*-- 文字: 二 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
- 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00
- };
- char code san[]={
- /*-- 文字: 三 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00
- };
- char code si[]={
- /*-- 文字: 四 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
- 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00
- };
- char code wu[]={
- /*-- 文字: 五 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,
- 0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00
- };
- char code liu[]={
- /*-- 文字: 六 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00
- };
- char code qi[]={
- /*-- 文字: 七 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x80,0x80,0x80,0x80,0x80,0x40,0xFF,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00
- };
- char code ba[]={
- /*-- 文字: 八 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7E,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x00
- };
- char code jiu[]={
- /*-- 文字: 九 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,
- 0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x78,0x00
- };
- char code ssi[]={
- /*-- 文字: 十 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- //-----------------18B20-----------------------
- unsigned char L_18B20,H_18B20,zhengshu,shangwen,xiawen; //溫度用變量
- unsigned int fg=0,xiaoshu_a; //溫度用變量
- //-----------------18B20----------------------
- //-------------音樂(lè)-----------------------------
- /*
- uint8 code SONG_TONE[]= //音樂(lè)數(shù)據(jù)
- {
- 212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,129,169,190,119,119,126,159,142,159,0
- };
- uint8 code SONG_LONG[]=//
- {
- 9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0
- }; */
- uint8 code SONG_TONE[]= //音樂(lè)數(shù)據(jù)
- {
- 212,212,0
- };
- uint8 code SONG_LONG[]=//
- {
- 9,3,0
- };
- //------------------------------------------------------------
- void delay(uint16 n)//延時(shí)us級(jí)
- {
- while (n--);
- }
- //************************************************************************/
- // 函數(shù): LCD_Delay()
- // 描述: 延時(shí)t ms函數(shù)
- // 參數(shù): t
- // 返回: 無(wú)
- // 備注: 11.0592MHZ t=1延時(shí)時(shí)間約1ms
- // 版本: 2011/01/01 First version
- //************************************************************************/
- void Delay_nms(unsigned int t)
- {
- unsigned int i,j;
- for(i=0;i<t;i++) //循環(huán)t次
- for(j=0;j<113;j++) //循環(huán)113次 每次約3us
- ;
- }
- /////////////////////////////////////////////////
- //-----------播放音樂(lè)----------------------------
- void PlayMusic()
- {
- uint16 i =0,j,k;
- while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
- {
- for(j=0;j<SONG_LONG[i]*20;j++) //讀取數(shù)據(jù)
- {
- BEEP = ~BEEP; //蜂鳴器取反
- for(k=0;k<SONG_TONE[i]/3;k++); //讀取數(shù)據(jù)
- }
- Delay_nms(10); //延時(shí)10ms
- i++; //累加1
- }
- BEEP =1; //關(guān)閉蜂鳴器
- }
- /////////////////////////////////////////////////
- /*------DS18B20------*/
- void delay_18B20(unsigned int i)
- {
- while(i--);
- }
- /*DS18B20的復(fù)位脈沖 主機(jī)通過(guò)拉低單總線(xiàn)至少480us以產(chǎn)生復(fù)位脈沖
- 然后主機(jī)釋放單總線(xiàn)并進(jìn)入接收模式 此時(shí)單總線(xiàn)電平被拉高
- DS18B20檢測(cè)到上升沿后 延時(shí)15~60us,拉低總線(xiàn)60~240us產(chǎn)生應(yīng)答脈沖 */
- void Init_DS18B20(void)
- {
- unsigned char x=0;
- DQ = 1; //DQ復(fù)位
- delay_18B20(8); //稍做延時(shí)
- DQ = 0; //單片機(jī)將DQ拉低
- delay_18B20(80); //精確延時(shí) 大于 480us
- DQ = 1; //拉高總線(xiàn)
- delay_18B20(14); //延時(shí)
- x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
- delay_18B20(20); //延時(shí)
- }
- /*寫(xiě)時(shí)隙 主機(jī)在寫(xiě)1時(shí)隙向DS18B20寫(xiě)入1,在寫(xiě)0時(shí)隙向DS18B20寫(xiě)入0
- 所有寫(xiě)時(shí)隙至少需要60us,且在兩次寫(xiě)時(shí)隙之間至少需要1us的恢復(fù)時(shí)間
- 兩種寫(xiě)時(shí)隙均以主機(jī)拉低總線(xiàn)開(kāi)始
- 產(chǎn)生寫(xiě)1時(shí)隙:主機(jī)拉低總線(xiàn)后,必須在15us內(nèi)釋放總線(xiàn),由上拉電阻拉回至高電平
- 產(chǎn)生寫(xiě)0時(shí)隙:主機(jī)拉低總線(xiàn)后,必須整個(gè)時(shí)隙保持低電平 */
- void WriteOneChar(unsigned char dat)
- {
- unsigned char i=0;
- for (i=8; i>0; i--)//循環(huán)8次
- {
- DQ = 0; //DQ輸出0
- DQ = dat&0x01;
- delay_18B20(5); //延時(shí)
- DQ = 1; //DQ輸出1
- dat>>=1; //右移位
- }
- }
-
- /*所有讀時(shí)隙至少60us 且兩次獨(dú)立的讀時(shí)隙之間至少需要1us的恢復(fù)時(shí)間
- 每次讀時(shí)隙由主機(jī)發(fā)起,拉低總線(xiàn)至少1us。
- 若傳1,則保持總線(xiàn)高電平;若發(fā)送0,則拉低總線(xiàn)
- 傳0時(shí)DS18B20在該時(shí)隙結(jié)束時(shí)釋放總線(xiàn),再拉回高電平狀態(tài),主機(jī)必須在讀時(shí)隙開(kāi)始后的15us內(nèi)釋放總線(xiàn),并保持采樣總線(xiàn)狀態(tài) */
- unsigned char ReadOneChar(void)
- {
- unsigned char i=0;
- unsigned char dat = 0;
- for (i=8;i>0;i--)
- {
- DQ = 0; // 給脈沖信號(hào)
- dat>>=1; //移位
- DQ = 1; // 給脈沖信號(hào)
- if(DQ) //如果DQ=1,執(zhí)行下面的語(yǔ)句
- dat|=0x80;
- delay_18B20(4);//延時(shí)
- }
- return(dat); //返回?cái)?shù)據(jù)
- }
-
- void read_18B20(void)
- {
- Init_DS18B20();
- WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
- WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
- delay_18B20(100); // this message is wery important
- Init_DS18B20(); //初始化DS18B20
- WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
- WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
- delay_18B20(100); //延時(shí)
- L_18B20=ReadOneChar(); //讀取低八位數(shù)據(jù)
- H_18B20=ReadOneChar(); //讀取高八位數(shù)據(jù)
- zhengshu=L_18B20/16+H_18B20*16; //整數(shù)部分
- xiaoshu_a=(L_18B20&0x0f)*10/16; //小數(shù)第一位
- }
- //------------------DS18B20---------------------
- /////////////////////////////////////////////////
- /*
- * 按鍵掃描
- */
- int8 scan_key(void)
- {
- int8 val=-1; //初始化鍵值為-1
- if (KeyIn1 == 0) //判斷=0?有無(wú)按鍵按鍵
- {
- val = 1; //鍵值=1
- while (KeyIn1 == 0); //等待按鍵釋放
- }
- else if (KeyIn2 == 0) //判斷=0?有無(wú)按鍵按鍵
- {
- val = 2; //鍵值=2
- while (KeyIn2 == 0);//等待按鍵釋放
- }
- else if (KeyIn3 == 0) //判斷=0?有無(wú)按鍵按鍵
- {
- val = 3; //鍵值=3
- while (KeyIn3 == 0);//等待按鍵釋放
- }
- //if (val > 0)
- //buzzer_sound();
- return val; //返回鍵值
- }
- /*************
- * 手動(dòng)/自動(dòng)按鍵
- ***************/
- int8 scan_key_1(void)
- {
- // int8 flat=0; //初始化鍵值為-1
- if (KeyIna == 0) //判斷=0?有無(wú)按鍵按鍵
- {
- flat = 11; //鍵值=1
- while (KeyIna == 0); //等待按鍵釋放
- }
- else if (KeyInb == 0) //判斷=0?有無(wú)按鍵按鍵
- {
- flat ++; //鍵值=2
-
- while (KeyInb == 0);//等待按鍵釋放
- }
- return flat; //返回鍵值
- }
- /*
- * 主界面框架
- */
- void main_frame(void)
- {
- play32(80, 2, 10); //顯示數(shù)
- play32(32, 2, 10); //顯示數(shù)
- play8(16, 0, S_xie);//顯示斜線(xiàn)
- play8(40, 0, S_xie);//顯示斜線(xiàn)
- // play8(96, 0, RH);
- // play8(120, 0, S_percent);
- // play8(120, 6, S_du);//顯示度
- }
- /*
- * 主界面
- */
- void main_show(bit refresh)
- {
- // uint8 lunar[2];
- if (refresh)
- read_time((uint8 *)&time);// 讀時(shí)間函數(shù)// 時(shí)間
- if (refresh || (time.sec != tmp_time.sec)) // 秒更新
- {
- tmp_time.sec = time.sec; //讀取秒數(shù)據(jù)
- //play8_num(104, 6,zhengshu); //溫度顯示
- play32_num(96, 2, time.sec); //顯示秒
- }
- if (refresh)
- main_frame();//刷新界面
- if (refresh || (time.min != tmp_time.min)) // 分更新
- {
- if (!refresh)
- flag = 0;
- tmp_time.min = time.min;//讀取分
- play32_num(48, 2, time.min); //顯示分
- }
- if (refresh || (time.hour != tmp_time.hour)) // 時(shí)更新
- {
- if ((!refresh)&&(Clock_flag))
- alarm_sound();
- tmp_time.hour = time.hour; //讀取時(shí)
- play32_num(0, 2, time.hour); //顯示時(shí)
- }
- if (refresh || (time.day != tmp_time.day)) //日更新
- {
- tmp_time.day = time.day; //讀取日
- play8_num(48, 0, time.day); //顯示日
- // 農(nóng)歷
- //turn_lunar_calendar(&time, lunar);
- //play_lunar_calendar(0, 6, lunar[0], lunar[1]);
- }
- if (refresh || (time.week != tmp_time.week)) // 周更新
- {
- tmp_time.week = time.week; //讀取周
- play_week(68, 0, time.week); //顯示周
- }
- if (refresh || (time.mon != tmp_time.mon)) // 月更新
- {
- tmp_time.mon = time.mon; //讀取月
- play8_num(24, 0, time.mon); //顯示月
- // 農(nóng)歷
- //turn_lunar_calendar(&time, lunar); //轉(zhuǎn)換農(nóng)歷月
- //play_lunar_calendar(0, 6, lunar[0], lunar[1]); //顯示農(nóng)歷月
- }
- if (refresh || (time.year != tmp_time.year)) // 年更新
- {
- tmp_time.year = time.year; //讀取年數(shù)據(jù)
- play8_num(0, 0, time.year); //顯示年
- // 農(nóng)歷
- // turn_lunar_calendar(&time, lunar); //轉(zhuǎn)換農(nóng)歷年
- // play_lunar_calendar(0, 6, lunar[0], lunar[1]); //顯示農(nóng)歷年
- }
-
- }
- /*
- * 主機(jī)界面設(shè)置
- */
- void main_set(void)
- {
- int8 key_val,state=1; //變量
- play32_num(96, 2|0x80, time.sec); //顯示秒
- while (1)
- { key_val = scan_key();//鍵盤(pán)掃描
- if (key_val == 1) // 設(shè)置
- {
- if (state >= 7)
- state = 0;
- else
- state++; //位置狀態(tài)加1
- set_time((uint8 *)&time); //設(shè)置時(shí)間
- main_show(1); //顯示主界面
- switch (state)
- { case 0: set_time((uint8 *)&time); break;//設(shè)置時(shí)間
- case 1: play32_num(96, 2|0x80, time.sec); break;//顯示秒
- case 2: play32_num(48, 2|0x80, time.min); break;//顯示分
- case 3: play32_num(0, 2|0x80, time.hour); break;//顯示時(shí)
- case 4: play_week(68, 0|0x80, time.week); break;//顯示周
- case 5: play8_num(48, 0|0x80, time.day); break; //顯示日
- case 6: play8_num(24, 0|0x80, time.mon); break; //顯示月
- case 7: play8_num(0, 0|0x80, time.year); break; //顯示年
- default: break; //退出循環(huán)
- }
- }
- else if (key_val > 1)//按鍵值大于1
- {
- if (state == 1)//位置1設(shè)置秒
- {
- if (key_val == 3)//加按下?
- time.sec++;//秒加1
- else
- time.sec--; //秒減1
- if (time.sec >= 60)
- time.sec = 0;
- else if (time.sec < 0)
- time.sec = 59;
- play32_num(96, 2|0x80, time.sec);//顯示秒
- }
- else if (state == 2) //位置2設(shè)置分
- {
- if (key_val == 3) //加按下?
- time.min++; //加1
- else
- time.min--; //減1
- if (time.min >= 60)
- time.min = 0;
- else if (time.min < 0)
- time.min = 59;
- play32_num(48, 2|0x80, time.min);//顯示分
- }
- else if (state == 3) //位置3設(shè)置時(shí)
- { if (key_val == 3) //加按下?
- time.hour++; //加1
- else
- time.hour--; //減1
- if (time.hour >= 24)
- time.hour = 0;
- else if (time.hour < 0)
- time.hour = 23;
- play32_num(0, 2|0x80, time.hour);//顯示時(shí)
- }
- else if (state == 4) //位置4設(shè)置周
- { if (key_val == 3) //加按下?
- time.week++; //加1
- else
- time.week--; //減1
- if (time.week >= 8)
- time.week = 1;
- else if (time.week < 1)
- time.week = 7;
- play_week(68, 0|0x80, time.week);//顯示周
- }
- else if (state == 5)//位置5設(shè)置日
- {
- if (key_val == 3) //加按下?
- time.day++; //加1
- else
- time.day--; //減1
- if (time.day >= 32)
- time.day = 1;
- else if (time.day < 1)
- time.day = 31;
- play8_num(48, 0|0x80, time.day);//顯示日
- }
- else if (state == 6) //位置6設(shè)置月
- {
- if (key_val == 3) //加按下?
- time.mon++; //加1
- else
- time.mon--; //減1
- if (time.mon >= 13)
- time.mon = 1;
- else if (time.mon < 1)
- time.mon = 12;
- play8_num(24, 0|0x80, time.mon);//顯示月
- }
- else if (state == 7) //位置7設(shè)置年
- {
- if (key_val == 3) //加按下?
- time.year++; //加1
- else
- time.year--; //減1
- if (time.year >= 100)
- time.year = 0; //0年
- else if (time.year < 0)
- time.year = 99; //99年
- play8_num(0, 0|0x80, time.year);//顯示年
- }
- else
- {
- break; //退出循環(huán)
- }
- }
- if (state == 0)
- break; //退出循環(huán)
- }
- }
- main()
- {
- uint8 key_val,key_val_1;
- uint8 val1=1,val2=1,val3=1,val4=1,val5=1,val6=1,val7=1,val8=1,val9=1,val10=1;
- //read_18B20(); //初始DS18B20
- //Delay_nms(1000);//延時(shí)1S,等待18B20工作正常
- led1=0; //手動(dòng)
- led2=0; //自動(dòng)
- led3=0; //上
- led4=0; //下
-
- LCD_init(); //初始化液晶
- clear12864(); //清屏幕
- main_frame(); //顯示主界面框架
- main_show(1); //刷新1次
- //read_18B20(); //讀溫度
- // play8_num(104, 6,zhengshu); //顯示溫度
- while(1)
- {
- play16(0, 6,zhan);
- play16(16, 6,ming);
- play16(32, 6,m);
- key_val = scan_key();
- key_val_1 = scan_key_1();
- if(key_val_1==11){ //自動(dòng)
- play16(90, 6,zi); //自動(dòng)顯示
- led2=1;
- led1=0;
- //上行
- play16(112, 6,shang);
- led3=1; led4=0;
- play16(40, 6,yi); PlayMusic();
- play16(66, 6,zhan); Delay_nms(5000); PlayMusic();
- play16(40, 6,er);Delay_nms(5000); PlayMusic();
- play16(40, 6,san);Delay_nms(5000); PlayMusic();
- play16(40, 6,si);Delay_nms(5000); PlayMusic();
- play16(40, 6,wu); Delay_nms(5000); PlayMusic();
- //下行
- play16(112, 6,xia);
- led3=0; led4=1;
- play16(40, 6,wu); Delay_nms(5000); PlayMusic();
- play16(40, 6,si);Delay_nms(5000); PlayMusic();
- play16(40, 6,san);Delay_nms(5000); PlayMusic();
- play16(40, 6,er);Delay_nms(5000); PlayMusic();
- play16(40, 6,yi);Delay_nms(5000); PlayMusic();
- }
- if(key_val_1>0&&key_val_1<11) //
- {
- led1=1;
- led2=0;
- play16(90, 6,shou);
- }
- //手動(dòng)按鍵
- //上行
- if(key_val_1>=1&&key_val_1<6)
- {
- play16(112, 6,shang);
- led3=1; led4=0;
- }
- if(key_val_1==1)
- {
- play16(40, 6,yi); //
- play16(66, 6,zhan);
- while(val1){ PlayMusic();val1--; }
-
- }
- if(key_val_1==2)
- {
- play16(40, 6,er);
- while(val2){ PlayMusic();val2--; }
- }
- if(key_val_1==3)
- {
- play16(40, 6,san);
- while(val3){ PlayMusic();val3--; }
- }
- if(key_val_1==4)
- {
- play16(40, 6,si);
- while(val4){ PlayMusic();val4--; }
- }
- if(key_val_1==5)
- {
- play16(40, 6,wu);
- while(val5){ PlayMusic();val5--; }
- }
- //********手動(dòng)下行*************/
- if(key_val_1>=6&&key_val_1<11)
- {
- play16(112, 6,xia);
- led3=0; led4=1;
- }
- if(key_val_1==6)
- {
- play16(40, 6,wu);
- while(val6){ PlayMusic();val6--; }
- }
- if(key_val_1==7)
- {
- play16(40, 6,si);
- while(val7){ PlayMusic();val7--; }
- }
- if(key_val_1==8)
- {
- play16(40, 6,san);
- while(val8){ PlayMusic();val8--; }
- }
- if(key_val_1==9)
- {
- play16(40, 6,er);
- while(val9){ PlayMusic();val9--; }
- }
- if(key_val_1==10)
- {
- play16(40, 6,yi);
- while(val10){ PlayMusic();val10--; }
- key_val_1=0;
- }
-
- /*****************************
- *時(shí)間控制
- *****************************/
- if (key_val == 1) //K1?
- {
- main_set(); //設(shè)置主界面
- }
- else if (key_val == 2) //K2?
- {
- clear12864(); //清屏幕
- // alarm_show(); //鬧鐘畫(huà)面
- clear12864(); //清屏幕
- main_show(1); //主界面
- }
- else if (key_val == 3) //K3?
- {
- clear12864(); //清屏幕
- // alarm_show(); //鬧鐘畫(huà)面
- clear12864(); //清屏幕
- main_show(1); //主界面
- }
- else
- {
- read_time((uint8 *)&time); //讀取時(shí)間
- main_show(0); //顯示主界面
- if((time.sec%2)==0){read_18B20();} //每隔2S采集一次
- }
-
- // 鬧鐘
- /* if (Alarm_flag)//如果鬧鐘標(biāo)志有 執(zhí)行下面的
- {
- if ((flag == 0) && (alarm.hour == time.hour) && (alarm.min == time.min))//判斷條件是否滿(mǎn)足
- {
- flag = 1;
- clear12864(); //清屏幕
- // alarm_show(); //鬧鐘
- // PlayMusic(); //播放音樂(lè)
- // PlayMusic(); //播放音樂(lè)
- clear12864(); //清屏幕
- main_show(1); //顯示主界面
- }
- } */
- }
- }
復(fù)制代碼
51hei.png (5.23 KB, 下載次數(shù): 37)
下載附件
2020-5-26 21:35 上傳
由于我的代碼還不完善,暫不分享,大家有寫(xiě)好的代碼可以上傳附件一起學(xué)習(xí)交流,我只把仿真圖分享出來(lái),希望版主多獎(jiǎng)勵(lì)點(diǎn)黑幣,以便我下載其他資料學(xué)習(xí)
Proteus仿真工程文件下載地址:
附件里面只有仿真沒(méi)有代碼.7z
(50.24 KB, 下載次數(shù): 105)
2021-5-17 18:49 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|