基于单片机的时钟芯片C程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

/*============================================================使用1602液晶显示DS1302+c51时钟[注:AT89C51使用12M晶振]=============================================================*/#includeAT89x51.h#includestring.h#includeintrins.h#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};#defineLCM_RWP2_5//定义引脚#defineLCM_RSP2_4#defineLCM_EP2_6#defineLCM_DataP0#defineBusy0x80//用于检测LCM状态字中的Busy标识#defineucharunsignedchar#defineuintunsignedintsbitT_CLK=P3^5;sbitT_IO=P3^6;sbitT_RST=P3^7;sbitACC0=ACC^0;sbitACC7=ACC^7;sbitLED=P1^6;//背光灯输出(因本实验板无此功能所以此项功能无效)sbitsystem=P2^0;//模式sbitTimerUp=P2^2;//时间减sbitTimerDown=P2^1;//时间加sbitk1=P2^3;sbitk2=P2^7;sbitk3=P3^0;sbitk4=P3^1;sbitD1=P3^2;sbitD2=P3^3;sbitD3=P3^4;sbitSpeaker=P1^5;//蜂鸣器sbitds18b20=P1^7;/*************ds1302函数声明************/voidSet(uchar,uchar);//根据选择调整相应项目voidRTInputByte(uchar);//输入1Byte*/ucharRTOutputByte(void);//输出1Byte*/voidW1302(uchar,uchar);//向DS1302写入一个字节ucharR1302(uchar);//从DS1302读出一个字节voidSet1302(uchar*);//设置时间voidKeySound();//按键音voidClockSound();//闹铃蜂鸣声/**************温度函数声明************/voiddisplay_tem();uintread_tmp();voidtmpchange();voidtmpwrite(uchardat);uchartmpread_byte();bittmpread_bit();voiddsreset();voiddelay2(uintz);//voidtime_LCM(uchar);voidkeyscan();ucharid,msec,model,LedTime,flag,d,num1,num2,num3,c1,c2,c3,flag1;bita,b;ucharinittime[7]={0x00,0x00,0x12,0x20,0x07,0x02,0x10};//初始化后设置为:2010年7月20日星期212点0分0秒voidOut_LCM(void);//显示屏幕voidmodel0(void);//显示输出voidmodel1(void);voidmodel2(void);voidmodel3(void);voidmodel4(void);voidmodel5(void);voidmodel6(void);voidmode1();voidmode2();voidmode3();voidmode4();voidmode5();voidmode6();voidmode7();voidmode8();voidid_case1_key();//项目调整voidModset();//模式键处理voidWriteDataLCM(ucharWDLCM);voidWriteCommandLCM(ucharWCLCM,BuysC);ucharReadStatusLCM(void);voidLCMInit(void);voidOutputInformation(ucharX,ucharY,ucharDData);voidDisplayListChar(ucharX,ucharY,ucharcode*DData);voidDelay5Ms(void);voidDelay400Ms(void);voidsystemsetup(void);//进入系统设置ucharcodesystemp[]={System.setup};//字符串输出(系统设定)ucharcodeTIMER[]={Time};//字符串输出(时间)ucharcodeTIMER1[]={T};//字符串输出(时间)ucharcodeDATE[]={Date};//字符串输出(日期)ucharcodeDATE1[]={D};//字符串输出(日期)ucharcodealarmclock[]={Clock};//字符串输出(闹铃)ucharcodelamp[]={Lamp};//字符串输出(背光灯)ucharcodereset[]={Reset};//字符串输出(时间归零)ucharcodeexit[]={Exit};//字符串输出(退出)ucharcodeset[]={Set};//字符串输出(设置)ucharcodesec[]={sec};//字符串输出(秒)ucharcodeClockSet[]={ClockSet};//字符串输出(闹铃设置)ucharcodeClockOn[]={ON};//字符串输出(ON)ucharcodeClockOff[]={OFF};//字符串输出(OFF)ucharcodetake[]={TakingTimeToSet};//字符串输出(ON)ucharcodeshi1[]={06:30};ucharcodeshi2[]={07:30};ucharcodeshi3[]={11:30};ucharcodeshi4[]={12:30};ucharcodeshi5[]={18:30};ucharcodeshi6[]={19:30};ucharcodeshi7[]={00:30};ucharcodeshi8[]={03:30};voidtimesetup(void);//时间设置voiddatesetup(void);//日期设置voidalarmclockset(void);//闹铃设置voidlampsetup(void);//背光灯设置voidtimereset(void);//时间清零/*******************************************************************/voiddelay1(intms){unsignedchary;while(ms--){for(y=0;y250;y++){_nop_();_nop_();_nop_();_nop_();}}}voidmain(void){Speaker=1;//关闭蜂鸣器LED=0;//打开LED,低电平有效,外接9012驱动Delay400Ms();//启动等待,等LCM讲入工作状态Delay400Ms();LCMInit();//LCM初始化TMOD=0x01;//16位定时TH0=0x3c;//50msTL0=0xb0;EA=1;TR0=1;ET0=1;flag=1;flag1=1;while(1){keyscan();if(TimerDown==0)//左移键按下后把背光灯打开{Delay5Ms();if(TimerDown==0){KeySound();//蜂鸣声LED=0;//打开背光灯LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16;}//取出背光灯时间并转换为十进制数}if(TimerUp==0)//左移键按下后把背光灯打开{Delay5Ms();if(TimerUp==0){KeySound();//蜂鸣声LED=0;//打开背光灯LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16;}//取出背光灯时间并转换为十进制数}b=1;//模式键是否动作标志。为1时不动作,为0时动作。Modset();//调用模式键处理程序判断按键是否按下。if(b==0){KeySound();//蜂鸣声LED=0;//打开背光灯systemsetup();//进入系统设置模式LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16;//取出背光灯时间并转换为十进制数}if((LED==0)&&LedTime==0)//延时间是否到LED=1;//关闭背光灯if(R1302(0xc3)==1)//闹铃是否打开,0xc3为读闹铃寄存器地址。{if((R1302(0x85)==R1302(0xc5))&&(R1302(0x83)==R1302(0xc7))&&(flag1))//判断闹铃时间是否到,{ClockSound();//发出闹铃蜂鸣声,无按键动作蜂鸣一分钟。LED=0;if((TimerDown==0)||(TimerUp==0)){flag1=0;}}if(R1302(0x83)!=R1302(0xc7))flag1=1;}model0();//输出显示屏幕}}voidKeySound()//按键音{Speaker=0;//开蜂鸣声Delay5Ms();Speaker=1;//关蜂鸣声}voidClockSound()//闹铃蜂鸣声{if(a==0){Speaker=0;//开蜂鸣声Delay5Ms();Delay5Ms();Delay5Ms();Speaker=1;//关蜂鸣声}}voidModset()//模式键处理{if(system==0){Delay5Ms();if(system==0){while(system==0);KeySound();//蜂鸣声a=0;msec=0;b=0;//a、msec为闪烁标志,按键有动作时清零,不闪烁。}//b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。}}voidsystemsetup(void)//系统设置{model=1;while(model!=0){Out_LCM();if(TimerUp==0)//设置项目左移{Delay5Ms();if(TimerUp==0){a=0;msec=0;KeySound();//蜂鸣声if(model--==1)//6种系统设置项目model=6;}while(TimerUp==0);}if(TimerDown==0)//设置项目右移{Delay5Ms();if(TimerDown==0){a=0;msec=0;KeySound();//蜂鸣声if(model++==6)model=1;}while(TimerDown==0);}b=1;//模式键是否动作标志。为1时不动作,为0时动作。Modset();//调用模式键处理程序判断按键是否按下。if(b==0){KeySound();//蜂鸣声switch(model)//进入进个项目设置{case1:timesetup();break;//时间设置case2:datesetup();break;//日期设置case3:alarmclockset();break;//闹铃设置case4:lampsetup();break;//背光灯设置case5:timereset();break;//时间清零case6:model=0;break;//退出系统设置}}}}voidtimesetup()//时间调整{id=6;while(model==1)//model为1时进入时间调整{b=1;Modset();if

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功