可調(diào)電子鐘程序_第1頁
可調(diào)電子鐘程序_第2頁
可調(diào)電子鐘程序_第3頁
可調(diào)電子鐘程序_第4頁
可調(diào)電子鐘程序_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、/*-名稱:DS1302時鐘數(shù)碼管顯示論壇:編寫:shifang日期:2009.5修改:無內(nèi)容:DS1302實時時鐘數(shù)碼管顯示,只顯示時間。并通過4個按鍵加減小時、分鐘,其他參數(shù)調(diào)節(jié)自行添加-*/#include "ds1302.h"#include "18b20.h"#include "delay.h"#include "1602.h"sbit key0=P30;sbit key1=P31;sbit key2=P32;sbit key3=P33;#define KeyPort P1 /定義按鍵端口#define

2、DataPort P0 /定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0 替換/sbit c_select=P14;/調(diào)整鍵sbit c_up=P15;/sbit c_down=P16;/調(diào)下unsigned char ReadTimeFlag;/定義讀時間標志unsigned char key00,pos,set;unsigned char flag;/顯示模式標志位unsigned char num;unsigned int TempH,TempL,temp;/讀取溫度的臨時變量unsigned int timer1;unsigned char position=0;unsigned

3、char add=1;unsigned char TimeData8=1,1,1,1,1,1,1; /存儲顯示時間(時分秒)的全局變量 unsigned char DateData8; /存儲顯示時間(年月日)的全局變量unsigned char TempData8=0x30,0x30,'.',0x30,0x30,0xdf,'C' /存儲顯示溫度的全局變量 unsigned char pos1Data3=5,8,11;unsigned char pos2Data3=8,11,14;unsigned char MaxData6=100,13,32,24,60,60

4、;void Display(unsigned char FirstBit,unsigned char Num);/數(shù)碼管顯示函數(shù) void keyadd (uchar,uchar);/加一void keydec (uchar,uchar);/減一unsigned char KeyScan(void);/鍵盤掃描void Init_Timer0(void);/定時器初始化void int0_init();/中斷0初始化void int1_init();/int1初始化void time_change();/*-主函數(shù)-*/void main (void)flag=0;key00=0;add=1;

5、pos=0;timer1=200;LcdReset();DelayMs(2000);Ds1302_Write_Time();Ds1302_Init();/Ds1302_Write_Time();if(Init_DS18B20()ePutstr(9,1,"ERROR");ePutstr(3,0,"20");ePutstr(0,1,TempData);ReadTimeFlag=0;temp=0;Init_Timer0();/int0_init();/中斷初始化/int1_init();while (1) /主循環(huán)if (key00=0)key0=1;if(!

6、key0) /按下相應的按鍵,數(shù)碼管顯示相應的碼值DelayMs(20);if(!key0)key00=1;set=0;while (key0=0);Ds1302_Read_Time();DateData0=time_buf10/10+0x30; /時 DateData1=time_buf10%10+0x30; DateData2='-' DateData3=time_buf11/10+0x30; /分 DateData4=time_buf11%10+0x30; DateData5='-'DateData6=time_buf12/10+0x30; /秒 Date

7、Data7=time_buf12%10+0x30; TimeData0=time_buf13/10+0x30; /時 TimeData1=time_buf13%10+0x30; TimeData2=':' TimeData3=time_buf14/10+0x30; /分 TimeData4=time_buf14%10+0x30; TimeData5=':'TimeData6=time_buf15/10+0x30; /秒 TimeData7=time_buf15%10+0x30;if(ReadTimeFlag=1)ReadTimeFlag=0;temp=ReadT

8、emperature();if(temp>6000) temp=0;TempData0=(temp/1000)+0x30;TempData1=(temp%1000)/100+0x30; TempData2='.'TempData3=(temp%100)/10+0x30; TempData4=temp%10+0x30; TempData5=0xdf;TempData6='C'ePutstr(5,0,DateData);ePutstr(8,1,TimeData);ePutstr(0,1,TempData); /加入"-" /加入"

9、-"if (key00=1) key0=1; if(!key0) /按下相應的按鍵,數(shù)碼管顯示相應的碼值 DelayMs(20); if(!key0) key00=0; pos=0; while (key0=0); key1=1; if(!key1) /按下相應的按鍵,數(shù)碼管顯示相應的碼值 DelayMs(20); if(!key1) pos=pos+1; if(pos=6) pos=0; while (key1=0); if(set=0) timer1-; DateData0=time_buf10/10+0x30; /時 DateData1=time_buf10%10+0x30;

10、DateData2='-' /加入"-" DateData3=time_buf11/10+0x30; /分 DateData4=time_buf11%10+0x30; DateData5='-' DateData6=time_buf12/10+0x30; /秒 DateData7=time_buf12%10+0x30; TimeData0=time_buf13/10+0x30; /時 TimeData1=time_buf13%10+0x30;TimeData2=':' /加入"-" TimeData3=ti

11、me_buf14/10+0x30; /分 TimeData4=time_buf14%10+0x30; TimeData5=':' TimeData6=time_buf15/10+0x30; /秒 TimeData7=time_buf15%10+0x30; ePutstr(5,0,DateData); ePutstr(8,1,TimeData); if (timer1=0) set=1; timer1=300; if(set=1) if(pos<3) ePutstr(pos1Datapos,0," "); timer1-; else ePutstr(po

12、s2Datapos-3,1," "); timer1-; if (timer1=0) set=0; timer1=300; key2=1; if(!key2) /按下相應的按鍵,數(shù)碼管顯示相應的碼值 DelayMs(20); if(!key2) time_buf1pos=time_buf1pos+1; if (MaxDatapos=time_buf1pos) time_buf1pos=0; time_bufpos=time_buf1pos; Ds1302_Write_Time(); while (key2=0); key3=1;if(!key3) /按下相應的按鍵,數(shù)碼管顯

13、示相應的碼值 DelayMs(20);if(!key3)if (time_buf1pos=0) time_buf1pos=MaxDatapos-1; else time_buf1pos=time_buf1pos-1;time_bufpos=time_buf1pos;Ds1302_Write_Time();while (key3=0);/*if(ReadTimeFlag=1)ReadTimeFlag=0;temp=ReadTemperature();if(temp>6000) temp=0;TempData0=(temp/1000)+0x30;TempData1=(temp%1000)/1

14、00+0x30;TempData2='.'TempData3=(temp%100)/10+0x30;TempData4=temp%10+0x30;TempData5=0xdf;TempData6='C'ePutstr(0,1,TempData); */*時間調(diào)整函數(shù)*/*/void int0_init()/int0初始化IT0=1;EX0=1;EA=1;/*/void int1_init()/int1初始化IT1=1;EX1=1;EA=1;/*-顯示函數(shù),用于動態(tài)掃描數(shù)碼管輸入?yún)?shù) FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數(shù)碼管開始顯示 如輸

15、入0表示從第一個顯示。Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2-*/*-定時器初始化子程序-*/void Init_Timer0(void)TMOD |= 0x01; /使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響TH0=(65536-5000)/256; /賦值 2msTL0=(65536-5000)%256;EA=1; /總中斷打開ET0=1; /定時器中斷打開TR0=1; /定時器開關打開/*-定時器中斷子程序-*/void Timer0_isr(void) interrupt 1static unsigned int num;TH0=(65536-5000)/256

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論