万年历:希望大家能帮我看一下到底我的问题出在哪

[复制链接]
3514|5
 楼主| wzhang04 发表于 2008-6-3 20:37 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;一个万年历程序,自己写的,当然有参考一下别人的程序,lcd显示,用的是ds1302芯片调时,剩下就是一些按键之类的,现在问题是其他都正常,就是lcd显示正常计时的时候lcd上一些位置显示的是问号和数字间接闪烁,数字应该都读进去了,也可以正常读出,但是就是显示不正常。其他功能均正常。<br />&nbsp;&nbsp;&nbsp;&nbsp;电路绝对没有问题,拿别人的万年历试验过完全可以用。<br />&nbsp;&nbsp;&nbsp;&nbsp;都调了两天了,人都快疯了!可能我比较菜,但是我可以想到的办法都试过了,就是找不到问题所在,哪位好心人帮我看一下吧!或者跟我说个大概方向也成。<br />&nbsp;&nbsp;&nbsp;&nbsp;PS:示波器之类我没有,也找不到,所以没有办法用那个。<br />&nbsp;&nbsp;&nbsp;&nbsp;程序如下:<br />//调用函数库<br />#include&ltreg51.h&gt<br />#include&ltintrins.h&gt<br /><br />//宏定义<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;&nbsp;unsigned&nbsp;int<br /><br />//位定义<br />sbit&nbsp;&nbsp;ACC0&nbsp;=&nbsp;ACC^0;<br />sbit&nbsp;&nbsp;ACC7&nbsp;=&nbsp;ACC^7;<br /><br />sbit&nbsp;T_CLK=P2^2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//与硬件相关的连线&nbsp;&nbsp;clk为DS1302的时钟信号线<br />sbit&nbsp;T_IO=P2^3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DAT为DS1302的I/O数据线<br />sbit&nbsp;T_RST=P2^4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RST为DS1302的RST信号线<br /><br />sbit&nbsp;lcd_rs=P2^6;<br />sbit&nbsp;lcd_rw=P2^7;<br />sbit&nbsp;lcd_en=P2^5;<br /><br />sbit&nbsp;DS=P2^1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义温度传感器接口<br /><br />sbit&nbsp;sw_add=P1^0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义增加键<br />sbit&nbsp;sw_move=P1^1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义光标左移动键<br />sbit&nbsp;sw_changeweb=P1^3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义翻页键<br />sbit&nbsp;sw_back=P3^0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义回到计时按键<br /><br />sbit&nbsp;ring_bell=P1^2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//蜂鸣器接口<br /><br />uchar&nbsp;a[7]={0x00,0x15,0x14,0x03,0x06,0x02,0x09};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化日期<br />uchar&nbsp;week[21]={0x4d,0x6f,0x6e,0x54,0x75,0x65,0x57,0x65,0x64,0x54,0x68,0x75,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x46,0x72,0x69,0x53,0x61,0x74,0x53,0x75,0x6e};<br /><br />uchar&nbsp;welcome_screen1[10]=&quot;&nbsp;&nbsp;&nbsp;Welcome&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开机画面<br />uchar&nbsp;welcome_screen2[14]=&quot;by&nbsp;wei&nbsp;and&nbsp;zao&quot;;&nbsp;<br /><br />uchar&nbsp;numbuf1[4];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义一个数组用于存储温度各个位<br />uchar&nbsp;sec[7];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用于存储1302中读出的时间<br />uchar&nbsp;week_buf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用于存储周<br />uchar&nbsp;clockring[2];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用于闹钟存时<br />uchar&nbsp;ringdebug;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//闹钟闹铃判断<br />uchar&nbsp;ringbiao;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用于显示有闹钟<br />uchar&nbsp;ringbegin;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//闹钟开启判断<br />////////////////////////////////////////////////////////<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DS1820b温度传感器模块&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />////////////////////////////////////////////////////////<br />void&nbsp;delay(uint&nbsp;count)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delay&nbsp;&nbsp;&nbsp;延时子程序<br />{<br />&nbsp;&nbsp;uint&nbsp;i;<br />&nbsp;&nbsp;while(count)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;i=200;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(i&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;i--;<br />&nbsp;&nbsp;&nbsp;&nbsp;count--;<br />&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;rstds1820b(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送初始化命令子程序<br />{<br />&nbsp;&nbsp;uint&nbsp;i;<br />&nbsp;&nbsp;DS=0;<br />&nbsp;&nbsp;i=103;<br />&nbsp;&nbsp;while(i&gt0)i--;<br />&nbsp;&nbsp;DS=1;<br />&nbsp;&nbsp;i=4;<br />&nbsp;&nbsp;while(i&gt0)i--;<br />}<br /><br />bit&nbsp;readbit(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//read&nbsp;a&nbsp;bit&nbsp;&nbsp;&nbsp;&nbsp;读一位<br />{<br />&nbsp;&nbsp;&nbsp;uint&nbsp;i;<br />&nbsp;&nbsp;&nbsp;bit&nbsp;dat;<br />&nbsp;&nbsp;&nbsp;DS=0;i++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//i++&nbsp;for&nbsp;delay<br />&nbsp;&nbsp;&nbsp;DS=1;i++;i++;<br />&nbsp;&nbsp;&nbsp;dat=DS;<br />&nbsp;&nbsp;&nbsp;i=8;while(i&gt0)i--;<br />&nbsp;&nbsp;&nbsp;return&nbsp;(dat);<br />}<br /><br />uchar&nbsp;readbyte(void)&nbsp;&nbsp;&nbsp;//read&nbsp;a&nbsp;byte&nbsp;date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;读一个字节<br />{<br />&nbsp;&nbsp;uchar&nbsp;i,j,dat;<br />&nbsp;&nbsp;dat=0;<br />&nbsp;&nbsp;for(i=1;i&lt=8;i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;j=readbit();<br />&nbsp;&nbsp;&nbsp;&nbsp;dat=(j&lt&lt7)|(dat&gt&gt1);&nbsp;&nbsp;&nbsp;//读出的数据最低位在最前面,这样刚好一个字节在DAT里<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return(dat);<br />}<br /><br />void&nbsp;writebyte(uchar&nbsp;dat)&nbsp;&nbsp;&nbsp;//write&nbsp;a&nbsp;byte&nbsp;to&nbsp;ds18b20&nbsp;给温度传感器写一个字节<br />{<br />&nbsp;&nbsp;uint&nbsp;i;<br />&nbsp;&nbsp;uchar&nbsp;j;<br />&nbsp;&nbsp;bit&nbsp;testb;<br />&nbsp;&nbsp;for(j=1;j&lt=8;j++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;testb=dat&0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;dat=dat&gt&gt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(testb)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//write&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DS=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=8;while(i&gt0)i--;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DS=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//write&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=8;while(i&gt0)i--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;temchange(void)&nbsp;&nbsp;//DS18B20&nbsp;begin&nbsp;change&nbsp;&nbsp;&nbsp;发送温度转换命令<br />{<br />&nbsp;&nbsp;rstds1820b();<br />&nbsp;&nbsp;delay(1);<br />&nbsp;&nbsp;writebyte(0xcc);&nbsp;&nbsp;//&nbsp;address&nbsp;all&nbsp;drivers&nbsp;on&nbsp;bus<br />&nbsp;&nbsp;writebyte(0x44);&nbsp;&nbsp;//&nbsp;&nbsp;initiates&nbsp;a&nbsp;single&nbsp;temperature&nbsp;conversion<br />}<br /><br />uint&nbsp;gettem()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到温度值<br />{<br />&nbsp;&nbsp;float&nbsp;tt;<br />&nbsp;&nbsp;uchar&nbsp;a,b;<br />&nbsp;&nbsp;uint&nbsp;temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义一个变量用来表示温度<br />&nbsp;&nbsp;rstds1820b();<br />&nbsp;&nbsp;delay(1);<br />&nbsp;&nbsp;writebyte(0xcc);<br />&nbsp;&nbsp;writebyte(0xbe);<br />&nbsp;&nbsp;a=readbyte();<br />&nbsp;&nbsp;b=readbyte();<br />&nbsp;&nbsp;temp=b;<br />&nbsp;&nbsp;temp&lt&lt=8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将实型数据变成整型数据<br />&nbsp;&nbsp;temp=temp|a;<br />&nbsp;&nbsp;tt=temp*0.0625;<br />&nbsp;&nbsp;temp=tt*10+0.5;<br />&nbsp;&nbsp;return&nbsp;temp;<br />}<br /><br />void&nbsp;getnum()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到温度的十、个、小数位<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temchange();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numbuf1[0]=gettem()/100+0x30;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A=gettem()%100;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numbuf1[1]=A/10+0x30;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numbuf1[2]=0x2e;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numbuf1[3]=A%10+0x30;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />////////////////////////////////////////////////////////<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd1602显示模块&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />////////////////////////////////////////////////////////<br /><br />//延时函数<br />void&nbsp;delay1(uint&nbsp;ms)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//对于AT89S51来说大概延时为每单位4.5ms<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(ms--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt250;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;delay2(uint&nbsp;us)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每单位大约延时50us<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(us--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />//判断是否准备好<br />uchar&nbsp;lcd_ready()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;result;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_rs=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_rw=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay2(4);<br />&nbsp;&nbsp;&nbsp;&nbsp;result=P0&0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读寄存器BF位看是否忙<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;<br />}<br /><br />//写指令代码<br />void&nbsp;lcd_inputcode(uchar&nbsp;cmd)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(lcd_ready());<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_rs=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_rw=0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay2(2);<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=cmd;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay2(4);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//EN下降沿写指令代码<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay2(4);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=0;<br />}<br /><br />//写数据代码<br />void&nbsp;lcd_inputdata(uchar&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(lcd_ready());<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_rs=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_rw=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=dat;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay2(4);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay2(4);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=0;<br />}<br /><br />//设定显示位置<br />void&nbsp;lcd_pos(uchar&nbsp;XPOS,uchar&nbsp;YPOS)<br />{&nbsp;&nbsp;XPOS&=0x0f;<br />&nbsp;&nbsp;&nbsp;YPOS&=0x03;<br />&nbsp;&nbsp;&nbsp;if(YPOS==0x00)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(XPOS|0x80);<br />&nbsp;&nbsp;&nbsp;else&nbsp;if(YPOS==0x01)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode((XPOS+0x40)|0x80);<br />}<br /><br />//在指定位置显示一个字符<br />void&nbsp;displayonechar(uchar&nbsp;X,&nbsp;uchar&nbsp;Y,&nbsp;uchar&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;lcd_pos(X,Y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//根据参数定位<br />&nbsp;&nbsp;&nbsp;lcd_inputdata(dat);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写入字符数据<br />}<br /><br />//显示字符串<br />void&nbsp;displaychar(uchar&nbsp;dat[],line)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(dat!='\0')<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(i,line,dat);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />}<br />//初始化程序<br />void&nbsp;lcd_init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x38);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//工作方式设置<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x38);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(5);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x0c);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示光标及闪烁设置<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清DDRAM和AC值<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(5);<br />}<br /><br />//清屏程序<br />void&nbsp;lcd_clr()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(5);<br />}<br /><br />//闪动程序<br />void&nbsp;flash()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(150);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x08);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(150);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x0c);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(150);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x08);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(150);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x0c);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay1(150);<br />}<br /><br />//温度获取<br />void&nbsp;get1820()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;getnum();<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(i!=4)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(9+i,1,numbuf1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(13,1,0xdf);<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(14,1,0x43);<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />//开机显示画面<br />void&nbsp;dispaly_begin()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i,j;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80|0x11);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DDRAM地址设置两行显示<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt10;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputdata(welcome_screen1);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80|0x51);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt14;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputdata(welcome_screen2);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt16;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x18);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay1(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;flash();<br />}<br />////////////////////////////////////////////////////////<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;时钟芯片1302显示模块&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />////////////////////////////////////////////////////////<br />void&nbsp;DS1302InputByte(uchar&nbsp;d)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//实时时钟写入一字节(内部函数)<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;ACC&nbsp;=&nbsp;d;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=8;&nbsp;i&gt0;&nbsp;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T_IO&nbsp;=&nbsp;ACC0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//相当于汇编中的&nbsp;RRC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T_CLK&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T_CLK&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC&nbsp;=&nbsp;ACC&nbsp;&gt&gt&nbsp;1;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />}<br /><br />uchar&nbsp;DS1302OutputByte(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//实时时钟读取一字节(内部函数)<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=8;&nbsp;i&gt0;&nbsp;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC&nbsp;=&nbsp;ACC&nbsp;&gt&gt1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//相当于汇编中的&nbsp;RRC&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC7&nbsp;=&nbsp;T_IO;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T_CLK&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T_CLK&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(ACC);&nbsp;<br />}<br /><br />//先写地址,后写命令数据<br />void&nbsp;W1302(uchar&nbsp;ucAddr,uchar&nbsp;ucDa)&nbsp;&nbsp;&nbsp;&nbsp;//ucAddr:&nbsp;DS1302地址,&nbsp;ucData:&nbsp;要写的数据<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;T_RST&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;T_CLK&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;T_RST&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;DS1302InputByte(ucAddr);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;地址,命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DS1302InputByte(ucDa);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;写1Byte数据<br />&nbsp;&nbsp;&nbsp;&nbsp;T_CLK&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;T_RST&nbsp;=&nbsp;0;<br />}&nbsp;<br /><br />//先写地址,后后读命令数据<br />uchar&nbsp;R1302(uchar&nbsp;ucAddr)&nbsp;&nbsp;&nbsp;&nbsp;//读取DS1302某地址的数据<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucData;<br />&nbsp;&nbsp;&nbsp;&nbsp;T_RST&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;T_CLK&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;T_RST&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;DS1302InputByte(ucAddr);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;地址,命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ucData&nbsp;=&nbsp;DS1302OutputByte();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;读1Byte数据<br />&nbsp;&nbsp;&nbsp;&nbsp;T_CLK&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;T_RST&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(ucData);<br />}<br /><br />//读全部1302模块<br />void&nbsp;read_1302()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;uccode;<br />&nbsp;&nbsp;&nbsp;&nbsp;uccode=0x8d;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt7;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sec=R1302(uccode);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uccode=uccode-2;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />//写单个位1302模块<br />void&nbsp;write1302_bit(uchar&nbsp;ucAddr,uchar&nbsp;num)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;W1302(0x8e,0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;W1302(ucAddr,num);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;W1302(0x8e,0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />//显示单个时间,例如年,月等子程序<br />display1302_bit(uchar&nbsp;i,uchar&nbsp;address,uchar&nbsp;line)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(address,line,((sec&gt&gt4)&0x0f)+0x30);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(address+1,line,(sec&0x0f)+0x30);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />//初始时间<br />void&nbsp;write1302()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i1;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucAddr&nbsp;=&nbsp;0x80;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;W1302(0x8e,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;控制命令,WP=0,写操作<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i1&nbsp;=0;&nbsp;i1&lt7;&nbsp;i1++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;W1302(ucAddr,a[i1]);&nbsp;&nbsp;//&nbsp;秒&nbsp;分&nbsp;时&nbsp;日&nbsp;月&nbsp;星期&nbsp;年&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucAddr&nbsp;+=2;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;W1302(0x8e,0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;控制命令,WP=1,写保护&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />//1302显示模块<br />void&nbsp;get1302()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;read_1302();<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x01,0,0x32);<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x02,0,0x30);<br />&nbsp;&nbsp;&nbsp;&nbsp;display1302_bit(0,0x03,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示年<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x05,0,0x2d);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;display1302_bit(2,0x06,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示月<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x08,0,0x2d);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;display1302_bit(3,0x09,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示日<br />&nbsp;&nbsp;&nbsp;&nbsp;week_buf=((sec[1]&0x0f)-1)*3;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0c,0,week[week_buf]);&nbsp;&nbsp;&nbsp;&nbsp;//显示周<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0d,0,week[week_buf+1]);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0e,0,week[week_buf+2]);&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;display1302_bit(4,0x00,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示时<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x02,1,0x3a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;display1302_bit(5,0x03,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示分<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x05,1,0x3a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;display1302_bit(6,0x06,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示秒<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(ringbiao==1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判断时钟是否开启<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x08,1,0xef);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;ds1302_init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;write1302_bit(0x90,0xa9);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开涓流充电&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;W1302(0x8e,0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写保护&nbsp;<br />}<br /><br />////////////////////////////////////////////////////////<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;按键调时模块&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />////////////////////////////////////////////////////////<br />//延时模块,一个单位延时大概为1ms<br />void&nbsp;delayms(uint&nbsp;z)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(x=z;x&gt0;x--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(y=122;y&gt0;y--);<br />}<br /><br />//每一位调时模块<br />void&nbsp;changetime_bit0(uchar&nbsp;i,uchar&nbsp;code_change,uchar&nbsp;address_change,uchar&nbsp;line)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;sec=sec+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;write1302_bit(code_change,sec);<br />&nbsp;&nbsp;&nbsp;&nbsp;if((sec&0x0f)&gt9)sec=sec&0xf0;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(address_change,line,sec%16+0x30);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40*line+address_change);<br /><br />}<br /><br />void&nbsp;changetime_bit1(uchar&nbsp;i,uchar&nbsp;j,uchar&nbsp;code_change,uchar&nbsp;address_change,uchar&nbsp;line)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;sec=sec+0x10;<br />&nbsp;&nbsp;&nbsp;&nbsp;write1302_bit(code_change,sec);<br />&nbsp;&nbsp;&nbsp;&nbsp;if((sec&gt&gt4)&gtj)sec=sec&0x0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(address_change,line,sec/16+0x30);;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40*line+address_change);&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />//调时模块<br />void&nbsp;changetime()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调时钟时间<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保证第一次在个位分&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(sw_add==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(15);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sw_add==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//加按键判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!sw_add);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//松手判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(15);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!sw_add);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//松手判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//个位秒的修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit0(6,0x80,0x07,1);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//十位秒的修改&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit1(6,5,0x80,0x06,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//个位分的修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit0(5,0x82,0x04,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//十位分的修改&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit1(5,5,0x82,0x03,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//个位小时修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit0(4,0x84,0x01,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//十位小时修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit1(4,2,0x84,0x00,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//周修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sec[3]=sec[3]+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write1302_bit(0x8a,sec[3]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sec[3]&gt7)sec[3]=0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;week_buf=(sec[3]%16-1)*3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0c,0,week[week_buf]);&nbsp;//显示周<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0d,0,week[week_buf+1]);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0e,0,week[week_buf+2]);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x0c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==7)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//日个位修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit0(2,0x86,0x0a,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==8)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//日十位修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit1(2,3,0x86,0x09,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==9)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//月个位修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit0(1,0x88,0x07,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==10)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//月十位修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit1(1,1,0x88,0x06,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==11)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//年个位修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit0(0,0x8c,0x04,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//年十位修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changetime_bit1(0,9,0x8c,0x03,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(sw_move==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//移动按键判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sw_move==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!sw_move);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//松手判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!sw_move);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//松手判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt12)&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==1)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==2)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==3)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+3);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==4)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==5)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==6)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x0c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==7)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x0a);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==8)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x09);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==9)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x07);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==10)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==11)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x04);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x03);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />void&nbsp;changering_bit0(uchar&nbsp;i,uchar&nbsp;address_ring)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;clockring=clockring+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if((clockring&0x0f)&gt9)clockring=clockring&0xf0;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(address_ring,1,clockring%16+0x30);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+address_ring);<br />}<br /><br />void&nbsp;changering_bit1(uchar&nbsp;i,uchar&nbsp;j,uchar&nbsp;address_ring)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;clockring=clockring+0x10;<br />&nbsp;&nbsp;&nbsp;&nbsp;if((clockring&gt&gt4)&gtj)clockring=clockring&0x0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(address_ring,1,clockring/16+0x30);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+address_ring);&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;changering()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调闹钟时间<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(sw_add==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(15);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sw_add==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按键判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!sw_add);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//松手判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(15);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!sw_add);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//松手判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ringbiao=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ringbegin=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//个位分的修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changering_bit0(0,0x0a);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//十位分的修改&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changering_bit1(0,5,0x09);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//个位小时修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changering_bit0(1,0x07);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//十位小时修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changering_bit1(1,2,0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(sw_move==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按键判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sw_move==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!sw_move);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//松手判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!sw_move);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//松手判定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt3)&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==0)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+0x0a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//光标移动<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==1)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+9);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==2)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==3)&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80+0x40+6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />}<br /><br />void&nbsp;change1302_bit(uchar&nbsp;address_1302,uchar&nbsp;line,uchar&nbsp;i)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(address_1302,line,sec/16+0x30);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(address_1302+1,line,sec%16+0x30);&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;display1302()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//对当前sec数值进行提取显示<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x01,0,0x32);<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x02,0,0x30);<br />&nbsp;&nbsp;&nbsp;&nbsp;change1302_bit(0x03,0,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示年<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x05,0,0x2d);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;change1302_bit(0x06,0,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示月<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x08,0,0x2d);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;change1302_bit(0x09,0,2);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;week_buf=(sec[3]%16-1)*3;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0c,0,week[week_buf]);&nbsp;&nbsp;//显示周<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0d,0,week[week_buf+1]);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0e,0,week[week_buf+2]);&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;change1302_bit(0x00,1,4);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示时<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x02,1,0x3a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;change1302_bit(0x03,1,5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示分<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x05,1,0x3a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;change1302_bit(0x06,1,6);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示秒<br />}<br /><br />//不同屏幕的显示函数<br />void&nbsp;screen0()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;display1302();<br />&nbsp;&nbsp;&nbsp;&nbsp;get1820();<br />}<br />void&nbsp;screen1()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;displaychar(&quot;&nbsp;&nbsp;made&nbsp;in&nbsp;fzu&nbsp;&nbsp;&nbsp;&quot;,0);<br />}<br />void&nbsp;screen2()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;ringdebug=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;displaychar(&quot;&nbsp;&nbsp;&nbsp;bell&nbsp;ring&nbsp;&nbsp;&nbsp;&nbsp;&quot;,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x06,1,clockring[1]/16+0x30);&nbsp;//显示时<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x07,1,clockring[1]%16+0x30);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x08,1,0x3a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分隔符<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x09,1,clockring[0]/16+0x30);&nbsp;//显示分<br />&nbsp;&nbsp;&nbsp;&nbsp;displayonechar(0x0a,1,clockring[0]%16+0x30);<br />}<br /><br />//闹时界面<br />void&nbsp;displaybellring()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;ringbiao=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;displaychar(&quot;&nbsp;it's&nbsp;the&nbsp;time&nbsp;&nbsp;&quot;,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;displaychar(&quot;press&nbsp;sw&nbsp;to&nbsp;stop&quot;,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />//换屏幕显示<br />void&nbsp;changescreen()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(sw_changeweb==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sw_changeweb==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt2)&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;screen1();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i==2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;screen2();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;screen0();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(sw_changeweb!=1);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i==0)&nbsp;&nbsp;&nbsp;&nbsp;changetime();<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i==2)&nbsp;&nbsp;&nbsp;&nbsp;changering();&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />//对时钟进行调时<br />void&nbsp;changeclock()&nbsp;interrupt&nbsp;2<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x0f);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开光标<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x80|0x4f);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将光标移位至最后一位<br />&nbsp;&nbsp;&nbsp;&nbsp;while(sw_back!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;changescreen();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_inputcode(0x0c);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关光标<br />}<br /><br />//闹钟判断<br />void&nbsp;bellring()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(clockring[0]==sec[5]&&clockring[1]==sec[4]&&ringdebug==0&&ringbegin==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displaybellring();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ring_bell=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(sw_back!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ring_bell=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ringdebug++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />//按键初始化模块<br />void&nbsp;sw_init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;IT1=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使得外部中断的触发方式为低电平触发;<br />&nbsp;&nbsp;&nbsp;&nbsp;EX1=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//允许外部的中断0的中断请求<br />&nbsp;&nbsp;&nbsp;&nbsp;PX1=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置外部中断为高优先级&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//开中断终端设置<br />&nbsp;&nbsp;&nbsp;&nbsp;EA=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开中断总允许位<br />}<br /><br /><br />void&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;sw_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;dispaly_begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;ds1302_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;write1302();<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_clr();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get1820();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get1302();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bellring();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(500);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//flash();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />
xieyuanbin 发表于 2008-6-4 07:38 | 显示全部楼层

晕死,这么长的程序看也看几天

我想你一定是在什么地方有不必要的数据误送进LCD了.你可以看看是否什么东西调用了你的LCD通讯,或者是程序有什么不对的地方跳转到LCD通讯中去了.
ayb_ice 发表于 2008-6-4 10:56 | 显示全部楼层

可能发送一半时,被打断了,比如中断

而且中断时间较长
01dxwlm 发表于 2008-6-8 22:34 | 显示全部楼层

应该是你LCD显示平率太高,

建议<br />1:把发送LCD的数据频率降低<br />2;发送期间关闭中断<br />3:如果LCD模块本身有RC震荡的话,把RC平率降低
bojiazu 发表于 2008-6-15 12:59 | 显示全部楼层

是时钟和延时的问题

具体我也不太清楚
bojiazu 发表于 2008-6-15 13:11 | 显示全部楼层

程序改动

写数据:<br />void&nbsp;lcd_inputdata(uchar&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(lcd_ready());<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_rs=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_rw=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=dat;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay2(?);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_en=0;<br />}<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部