资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
本程序是用lcd1602显示实时时钟Ds1302Ds1302单字节读写顺序程序如下:#include#include#define uint unsigned int#define uchar unsigned charsbit sclk=P36;sbit rst=P35;sbit dsio=P34;sbit rs=P26;sbit rw=P25;sbit e=P27;uchar busy1;uchar code write_addr7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c;uchar code read_addr7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d;uchar time7=0,0x49,0x14,0x22,0x02,0x01,0x16;uchar DisplayData8;void delay(uint n)uchar m;while(-n)for(m=0;m40;m+); unsigned char busy() unsigned char f; rs=0; rw=1; e=1; delay(1); f=P0; e=0; busy1=f&0x80; return busy1; void lcd_write_com(unsigned char com1) /写命令while(busy()=0x80);rs=0;rw=0;e=0;P0=com1;delay(5);e=1;delay(5);e=0;void lcdreset( ) /初始化delay(10);lcd_write_com(0x38);/设置显示模式lcd_write_com(0x0c);lcd_write_com(0x06);lcd_write_com(0x01);lcd_write_com(0x80);void lcd_write_data(unsigned char data1) /写数据while(busy()=0x80);rs=1;rw=0;e=0;P0=data1;delay(5);e=1;delay(5);e=0;void ds1302_write(uchar addr,uchar dat)uchar n;sclk=0;_nop_();rst=1;_nop_();for(n=0;n=1;sclk=1;_nop_();sclk=0;_nop_();for(n=0;n=1;sclk=1;_nop_();sclk=0;_nop_();rst=0;_nop_();uchar ds1302_read(uchar addr)uchar n,dat,dat1;sclk=0;_nop_();rst=1;_nop_();for(n=0;n=1;sclk=1;_nop_();sclk=0;_nop_();_nop_();for(n=0;n1;/dat|=dat17;dat=(dat11);sclk=1;_nop_();sclk=0;_nop_();rst=0;_nop_();sclk=1;_nop_();dsio=0;_nop_();dsio=1;_nop_();return dat;void ds1302_init()uchar n;ds1302_write(0x8e,0x00);for(n=0;n7;n+)ds1302_write(write_addrn,timen);ds1302_write(0x8e,0x80);void ds1302_readtime()uchar n;for(n=0;n7;n+)timen=ds1302_read(read_addrn);void display()lcd_write_com(0x80+0x40);lcd_write_data(0+time2/16);lcd_write_data(0+(time2&0x0f);lcd_write_data(-);lcd_write_data(0+time1/16);lcd_write_data(0+(time1&0x0f);lcd_write_data(-);lcd_write_data(0+time0/16);lcd_write_data(0+(time0&0x0f);lcd_write_com(0x80);lcd_write_data(2);lcd_write_data(0);lcd_write_data(0+time6/16);lcd_write_data(0+(time6&0x0f);lcd_write_data(-);lcd_write_data(0+time4/16);lcd_write_data(0+(time4&0x0f);lcd_write_data(-);lcd_write_data(0+time3/16);lcd_write_data(0+(time3&0x0f); void main()/ds1302_init( );/使用这条语句就可以显示设定的时间,不时用就会使用实时时钟。_nop_();lcdreset( );while(1)ds1302_readtime();display();模块化编程Ds1302.h#ifndef _DS1302_H_#define _DS1302_H_#include#include#define uchar unsigned char#define uint unsigned intuchar datatime7,write_addr7;sbit io=P34;sbit sclk=P36;sbit rst=P35;void ds1302_write(uchar addr,uchar dat);uchar ds1302_read(uchar addr);void ds1302_init();void ds1302_readtime();#endifDs1302.c#includeuchar datatime7=0,0x10,0x16,0x21,0x02,0x07,0x16;/存取数据void ds1302_write(uchar addr,uchar dat)uchar n;sclk=0;_nop_();rst=1;_nop_();for(n=0;n=1;sclk=1;_nop_();sclk=0;_nop_();for(n=0;n=1;sclk=1;_nop_();sclk=0;_nop_();rst=0;_nop_();uchar ds1302_read(uchar addr)uchar n,dat,dat1;sclk=0;_nop_();rst=1;_nop_();for(n=0;n=1;sclk=1;_nop_();sclk=0;_nop_();_nop_();for(n=0;n1;/dat|=dat17;dat=(dat11);sclk=1;_nop_();sclk=0;_nop_();rst=0;_nop_();sclk=1;_nop_();io=0;_nop_();io=1;_nop_();return dat;void ds1302_init()uchar n,addr=0x80;ds1302_write(0x8e,0x00);for(n=0;n7;n+)ds1302_write(addr,datatimen);addr+=2;ds1302_write(0x8e,0x80);void ds1302_readtime()uchar n,addr=0x81;for(n=0;n7;n+)datatimen=ds1302_read(addr);addr+=2;Lcd1602.h#ifndef _LCD1602_H_#define _LCD1602_H_#include#include#define uchar unsigned char#define uint unsigned intsbit rs=P26;sbit rw=P25;sbit en=P27;void delay(uchar ms);void busy_wait();void write_lcd_command(uchar cmd);void write_lcd_data(uchar dat);void init_lcd();void lcd_showstring(uchar r,uchar c,uchar *str);#endifLcd1602.c#includecode uchar ddram
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号