基于at89s52的电子万年历设计报告内容摘要:

uchar row,uchar col)。 void Set_place(uchar row,uchar col)。 void Play_nowtime()。 void key_set(uchar num,uchar row,uchar col )。 void alarm_time()。 void Play_alarmtime()。 void Time_pare()。 /******************************************************************/ /******************************************************************/ void delay1(int ms) { unsigned char y。 while(ms) { for(y = 0。 y y++) { _nop_()。 _nop_()。 _nop_()。 _nop_()。 } } } /******************************************************************/ /* 19 /*检查 LCD 忙状态 /*lcd_busy 为 1时,忙,等待。 lcdbusy 为 0时 ,闲,可写指令与数据。 /* /******************************************************************/ bit lcd_busy() { bit result。 LCD_RS = 0。 LCD_RW = 1。 LCD_EN = 1。 delayNOP()。 result = (bit)(P0amp。 0x80)。 LCD_EN = 0。 return(result)。 } /*********************************************************/ /* /*写指令数据到 LCD /*RS=L, RW=L, E=高脉冲, D0D7=指令码。 /* /*********************************************************/ void lcd_wcmd(uchar cmd) { while(lcd_busy())。 LCD_RS = 0。 LCD_RW = 0。 LCD_EN = 0。 _nop_()。 _nop_()。 P0 = cmd。 delayNOP()。 LCD_EN = 1。 delayNOP()。 LCD_EN = 0。 } /********************************************************/ /* /*写显示数据到 LCD /*RS=H, RW=L, E=高脉冲 , D0D7=数据。 /* /********************************************************/ void lcd_wdat(uchar dat) { while(lcd_busy())。 20 LCD_RS = 1。 LCD_RW = 0。 LCD_EN = 0。 P0 = dat。 delayNOP()。 LCD_EN = 1。 delayNOP()。 LCD_EN = 0。 } /********************************************************/ /* LCD 初始化设定 /********************************************************/ void init_lcd() { delay1(15)。 lcd_wcmd(0x01)。 //清除 LCD 的显示内容 lcd_wcmd(0x38)。 //16*2 显示 , 5*7 点阵 , 8 位数据 delay1(5)。 lcd_wcmd(0x38)。 delay1(5)。 lcd_wcmd(0x38)。 delay1(5)。 lcd_wcmd(0x0c)。 //显示开,关光标 delay1(5)。 lcd_wcmd(0x06)。 //移动光标 delay1(5)。 lcd_wcmd(0x01)。 //清除 LCD 的显示内容 delay1(5)。 } /********************************************************/ // /********************************************************/ void delay() { uchar j。 for(j=j0。 j)。 } /*******************************************************/ /* /* 写字符串函数 /* 21 /*******************************************************/ void write_str(uchar addr,uchar *p) { uchar i=0。 lcd_wcmd(addr)。 while(p[i]!=39。 \039。 ) { lcd_wdat(p[i])。 i++。 } } /*******************************************************/ /* /* 设定显示位置 /* /*******************************************************/ void write_position(uchar row,uchar col) { uchar place。 if(row==1) { place=0x80+col1。 lcd_wcmd(place)。 } else { place=0xc0+col1。 lcd_wcmd(place)。 } } /*******************************************************/ /* /*自定义字符写入 CGRAM /* /*******************************************************/ void writetab() { unsigned char i。 lcd_wcmd(0x40)。 //写 CGRAM for (i = 0。 i 8。 i++) lcd_wdat(mytab[i])。 } /*******************************************************/ // 22 /*******************************************************/ void write_byte(uchar inbyte) { uchar i。 for(i=0。 i8。 i++) { sclk=0。 //写的时候低电平改变数据 if(inbyteamp。 0x01) io=1。 else io=0。 sclk=1。 //写的时候高电平,把数据写入 ds1302 _nop_()。 inbyte=inbyte1。 } } /********************************************************/ /********************************************************/ uchar read_byte() //sclk 的下跳沿读数据 { uchar i,temp=0。 io=1。 //设置为输入口 for(i=0。 i7。 i++) { sclk=0。 if(io==1) temp=temp|0x80。 else temp=tempamp。 0x7f。 sclk=1。 //产生 下跳沿 temp=temp1。 } return (temp)。 } /********************************************************/ // 往 ds1302 的某个地址写入数据 /********************************************************/ void write_ds1302(uchar cmd,uchar indata) { sclk=0。 reset=1。 23 write_byte(cmd)。 write_byte(indata)。 sclk=0。 reset=0。 } /********************************************************/ // 读 ds1302 某地址的的数据 /**。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。