1、基于51单片机的1302时钟芯片C程序/*=使用1602液晶显示DS1302+c51时钟 注:AT89C51使用12M晶振=*/#include #include #include #define delayNOP(); _nop_() ;_nop_() ;_nop_() ;_nop_() ; ;#define LCM_RW P2_5 /定义引脚#define LCM_RS P2_4#define LCM_E P2_6#define LCM_Data P0#define Busy 0x80 /用于检测LCM状态字中的Busy标识#define uchar unsigned char#defin
2、e uint unsigned intsbit T_CLK=P35;sbit T_IO =P36;sbit T_RST=P37;sbit ACC0=ACC0;sbit ACC7=ACC7;sbit LED=P16; /背光灯输出 (因本实验板无此功能 所以此项功能无效)sbit system=P20; /模式sbit TimerUp=P22; /时间减sbit TimerDown=P21; /时间加sbit k1=P23;sbit k2=P27;sbit k3=P30;sbit k4=P31;sbit D1=P32;sbit D2=P33;sbit D3=P34;sbit Speaker=P1
3、5; /蜂鸣器sbit ds18b20=P17;/*ds1302函数声明*/void Set(uchar,uchar); /根据选择调整相应项目void RTInputByte(uchar); /输入 1Byte */uchar RTOutputByte(void); /输出 1Byte */void W1302(uchar, uchar); /向DS1302写入一个字节uchar R1302(uchar); /从DS1302读出一个字节void Set1302(uchar * ); /设置时间 void KeySound(); /按键音void ClockSound(); /闹铃蜂鸣声/*温
4、度函数声明*/void display_tem();uint read_tmp();void tmpchange();void tmpwrite(uchar dat);uchar tmpread_byte();bit tmpread_bit();void dsreset();void delay2(uint z);/void time_LCM(uchar);void keyscan();uchar id,msec,model,LedTime,flag,d,num1,num2,num3,c1,c2,c3,flag1;bit a,b; uchar inittime7=0x00,0x00,0x12,
5、0x20,0x07,0x02,0x10; /初始化后设置为:2010年7月20日星期2 12点0分0秒void Out_LCM(void); /显示屏幕void model0(void); /显示输出void model1(void);void model2(void);void model3(void);void model4(void);void model5(void);void model6(void);void mode1();void mode2();void mode3();void mode4();void mode5();void mode6();void mode7();v
6、oid mode8(); void id_case1_key(); /项目调整void Modset(); /模式键处理void WriteDataLCM(uchar WDLCM);void WriteCommandLCM(uchar WCLCM,BuysC);uchar ReadStatusLCM(void);void LCMInit(void);void OutputInformation(uchar X, uchar Y, uchar DData);void DisplayListChar(uchar X, uchar Y, uchar code *DData);void Delay5M
7、s(void);void Delay400Ms(void);void systemsetup(void); /进入系统设置uchar code systemp=System.setup; /字符串输出(系统设定)uchar code TIMER=Time; /字符串输出(时间)uchar code TIMER1=T; /字符串输出(时间)uchar code DATE=Date; /字符串输出(日期)uchar code DATE1=D; /字符串输出(日期)uchar code alarmclock=Clock; /字符串输出(闹铃)uchar code lamp=Lamp; /字符串输出(
8、背光灯)uchar code reset=Reset; /字符串输出(时间归零)uchar code exit=Exit; /字符串输出(退出)uchar code set=Set; /字符串输出(设置)uchar code sec=sec; /字符串输出(秒)uchar code ClockSet=ClockSet; /字符串输出(闹铃设置)uchar code ClockOn=ON; /字符串输出(ON)uchar code ClockOff=OFF; /字符串输出(OFF)uchar code take=TakingTimeToSet; /字符串输出(ON)uchar code shi1
9、=06:30;uchar code shi2=07:30;uchar code shi3=11:30;uchar code shi4=12:30;uchar code shi5=18:30;uchar code shi6=19:30;uchar code shi7=00:30;uchar code shi8=03:30;void timesetup(void); /时间设置void datesetup(void); /日期设置void alarmclockset(void); /闹铃设置void lampsetup(void); /背光灯设置 void timereset(void); /时间
10、清零/*/void delay1(int ms) unsigned char y ; while(ms-) for(y = 0 ; ymax) item=min; if(itemmin) item=max; W1302(0x8e,0x00); /允许写操作 W1302(address,item/10*16+item%10); /写入DS1302 /转成BCD码 W1302(0x8e,0x80); /写保护,禁止写操作 /屏幕显示void Out_LCM(void) switch(model) case 0: model0(); break; case 1: model1(); break; c
11、ase 2: model2(); break; /在不同的条件下显示不同的字符 case 3: model3(); break; case 4: model4(); break; case 5: model5(); break; case 6: model6(); break; /*model为零时第一行显示时间,不为零时显示system setup*/void model0() /DisplayListChar(0,0,TIMER); /显示固定字符串(Time) OutputInformation(9,0,0x20); /不显示 OutputInformation(12,1,0x20);
12、/不显示 /OutputInformation(15,1,0x20); /不显示 OutputInformation(4,1,0x2f); /显示固定字符 / OutputInformation(7,1,0x2f); /显示固定字符 / OutputInformation(10,1,0x2f); /显示固定字符 / / DisplayListChar(0,1,DATE); /显示固定字符串Date(日期) display_tem(); if(a=1) /冒号闪烁 OutputInformation(3,0,0x3a); OutputInformation(6,0,0x3a); else OutputInformation(3,0,0x20); OutputInformation(6,0,0x20); /*model为零时第二行显示日期,不为零显示设置项目*/ OutputInformation(0,1,2); /显示年 Out
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1