信息与通信]基于单片机的数字时钟日历设计内容摘要:

/次 unsigned char i。 while( a != 0){ for(i = 0。 i 125。 i++)。 //一个。 表示空语句 ,CPU 空转。 } //i 从 0 加到 125, CPU 大概就耗时 1 毫秒 } /*void DelayF(unsigned char b){ unsigned int j,k。 for(j=b。 j=0。 j){ for(k=3000。 k=0。 k)。 } } */ /****************************************************************************/ /*****************************************************************************/ //LCD 驱动( DY12864CBL 液晶显示屏并口驱动程序) /*****************************************************************************/ void chk_busy(){//检查忙位(底层) RS=0。 RW=1。 E=1。 Lcd_Bus=0xff。 while((Lcd_Busamp。 0x80)==0x80)。 E=0。 } /*****************************************************************************/ void write_(unsigned char cmdcode){//写命令到 LCD(底层) chk_busy()。 RS=0。 13 RW=0。 E=1。 Lcd_Bus=cmdcode。 E=0。 } /*****************************************************************************/ void write_data(unsigned char Dispdata){ //写数据到 LCD(底层) chk_busy()。 RS=1。 RW=0。 E=1。 Lcd_Bus=Dispdata。 E=0。 } /*****************************************************************************/ void lcm_init(){//初始化 LCD 屏(被调用层) // wela=0。 // dula=0。 write_(0x30)。 //选择 8bit 数据流 write_(0x0c)。 //开显示 (无游标、不反白 ) write_(0x01)。 //清除显示,并且设定地址指针为 00H } /*****************************************************************************/ void lcm_w_word(unsigned char *s){//向 LCM 发送 一个字符串 ,长度 64 字符(一行)之内。 while(*s0){ write_data(*s)。 s++。 } } /*****************************************************************************/ void lcm_w_test(bit i,unsigned char word){//写指令或数据 if(i == 0){ write_(word)。 //写指令或数据( 0,指令) }else{ write_data(word)。 //写指令或数据( 1,数据) } } /*****************************************************************************/ void lcm_clr(void){//清屏函数 lcm_w_test(0,0x01)。 } /*****************************************************************************/ void lcm_clr2(void){//清屏上面 3 行(用空格填满要清显示的地方,因为液晶屏是静态显示的,所以这办法常用) 14 lcm_w_test(0,0x80)。 //第一行 lcm_w_word( )。 //标尺 (1234567812345678应该能够显示满一行 ) lcm_w_test(0,0x90)。 //第二行 lcm_w_word( )。 //标尺 (1234567812345678应该能够显示满一行 ) lcm_w_test(0,0x88)。 //第一行 lcm_w_word( )。 //标尺 (1234567812345678应该能够显示满一行 ) } /*****************************************************************************/ //DS18B20 温度传感器驱动(显示 0 至 60 度,小数点后显示一位) /*****************************************************************************/ void Delay(int num){//延时函数 while(num)。 } /*****************************************************************************/ void Init_DS18B20(void){//初始化 ds1820 unsigned char x=0。 DQ = 1。 //DQ 复位 Delay(8)。 //稍做延时 DQ = 0。 //单片机将 DQ 拉低 Delay(80)。 //精确延时 大于 480us DQ = 1。 //拉高总线 Delay(14)。 x=DQ。 //稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 Delay(20)。 } /*****************************************************************************/ unsigned char ReadOneChar(void){//读一个字节 unsigned char i=0。 unsigned char dat = 0。 for (i=8。 i0。 i){ DQ = 0。 // 给脉冲信号 dat=1。 DQ = 1。 // 给脉冲信号 if(DQ) dat|=0x80。 Delay(4)。 } return(dat)。 } /*****************************************************************************/ 15 void WriteOneChar(unsigned char dat){//写一个字节 unsigned char i=0。 for (i=8。 i0。 i){ DQ = 0。 DQ = datamp。 0x01。 Delay(5)。 DQ = 1。 dat=1。 } } /*****************************************************************************/ unsigned int ReadTemperature(void){//读取温度,温度值返回到此函数中,供调用 unsigned char a=0。 unsigned char b=0。 unsigned int t=0。 float tt=0。 Init_DS18B20()。 WriteOneChar(0xCC)。 // 跳过读序号列号的操作 WriteOneChar(0x44)。 // 启动温度转换 Init_DS18B20()。 WriteOneChar(0xCC)。 //跳过读序号列号的操作 WriteOneChar(0xBE)。 //读取温度寄存器 a=ReadOneChar()。 //读低 8 位 b=ReadOneChar()。 //读高 8 位 t=b。 t=8。 t=t|a。 tt=t*。 t= tt*10+。 //放大 10 倍输出并四舍五入 return(t)。 //t 内的温度值,返回到子函数中,要将温度传输到 temp 变量,应用 temp=ReabTemperature() } /*****************************************************************************/ //后面会出现的函数声明(当各函数的排列适当时可不用声明,加入函数声明就不用管各个子函数出现的位置先后了。 ) void lcm_w_ss(void)。 //向液晶 LCM 中写秒数据 void lcm_w_mm(void)。 //向液晶 LCM 中写分数据 void lcm_w_hh(void)。 //向液晶 LCM 中写小时数据 void lcm_w_dd(void)。 //写日数据 void lcm_w_mo(void)。 //写月数据 void lcm_w_yy(void)。 //写年数据 void lcm_w_xq(void)。 //星期处理并送入 LCM 的指定区域 unsigned char clock_in(void)。 //DS1302 逐位写入字节(底层协议) void clock_out(unsigned char dd)。 //1302 驱动程序逐位读出字节(底层协议 ? void Init_1302(void)。 //设置 1302 的初始时间( 2020 年 1 月 1 日 00 时 00 分 00 秒星期一) 16 unsigned char read_clock(unsigned char ord)。 //DS1302 读数据(底 层协议) void read_clockS(void)。 void Set_time(unsigned char sel)。 //根据选择调整的相应项目 sel 加 1 并写入 DS1302 void write_clock(unsigned char ord, unsigned char dd)。 //DS1302 写数据(底层协议) void updata (void)。 void lcm_w_nl(void)。 //显示农历子函数 void Conversion(bit c,unsigned char year,unsigned char month,unsigned char day)。 //农历年月日计算子函数 void Conver_week(bit c,unsigned char year,unsigned char month,unsigned char day)。 //星期计算子函数 void ds_w(void)。 void alam_w1(void)。 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 void alam_w2(void)。 void lcm_w_ns2()。 void lcm_w_nf2()。 void naozhong()。 void lcm_w_naozhong()。 // void DelayF ()。 /*****************************************************************************/ //设置 1302 的初始时间(自动初始化) void Init_1302(void){//设置 1302。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。