完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
问题是LCD现在是乱显示了,麻烦看看程序哪里出了问题: 207 -01-01
7 :7 :7 #include #include #define uint unsigned int #define uchar unsigned char uchar code write_table[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; uchar code read_table[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; uchar code table3[]={'0','1','2','3','4','5','6','7','8','9'}; uchar table4[]={0x00,0x12,0x20,0x06,0x04,0x03,0x14}; uchar code table5[]="20 - - "; uchar table6[]; uchar code table7[]=" : : "; uint read_flag; ***it lcdrs = P2^6; ***it lcdrw = P2^5; ***it lcden = P2^7; ***it key1=P2^0; ***it sda=P3^4; ***it scl=P3^6; ***it rst=P3^5; ***it beep=P1^0; void init(); void write_rtc(uchar temp); void write_com(uchar com); void write_data(uchar dat); void read_rtc(); void set_rtc(); void tranform(); void write_byte(uchar address,uchar date); void delay(uint z); uchar read_byte(uchar address); void delay(uint ms) //延时程序,精确到0.998ms { uint x,y; for(x=ms;x>0;x--) for(y=121;y>0;y--); } void buzzer() //无源蜂鸣器起振程序 { beep=1; delay(5); beep=0; delay(5); } //对LCD1602 定时器 ds1302 初始化 void init() { TMOD|=0x01; TR0=1; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; rst=0; sda=0; scl=0; lcden=0; write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80); } //以下为lcd1602液晶屏程序 void write_com(uchar com) //lcd1602 写字节 { lcdrs=0; lcdrw=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(uchar dat) //lcd1602 写数据 { lcdrs=1; lcdrw=0; lcden=0; P0=dat; delay(5); lcden=1; delay(5); lcden=0; } //以下为DS1302程序 void write_rtc(uchar temp) //写命令 { int i; for(i=0;i<8;i++) { scl=0; sda=temp&0x01; temp=temp>>1; scl=1; } } void write_byte(uchar address,uchar date) //写数据 { rst=0; _nop_(); rst=1; _nop_(); write_rtc(address); write_rtc(date); rst=0; } uchar read_byte(uchar address) //阅读字节 { uchar i,temp=0x00; rst=0; _nop_(); scl=0; _nop_(); rst=1; _nop_(); write_rtc(address); for(i=0;i<8;i++) { scl=1; if(sda) temp|=0x80; temp=temp>>1; scl=0; } rst=0; scl=0; _nop_(); _nop_(); scl=1; _nop_(); sda=0; _nop_(); sda=1; _nop_(); _nop_(); return temp; } void read_rtc() //阅读时钟 { uchar /*i,*p,*/amiao,afen,ashi,ari,ayue,anian; /* p=read_table; for(i=0;i<7;i++) { table6=read_byte(*p); p++; } */ amiao=read_byte(0x81); afen=read_byte(0x83); ashi=read_byte(0x85); ari=read_byte(0x87); ayue=read_byte(0x89); anian=read_byte(0x8d); write_com(0x80+2); write_data(table3[anian>>4]); write_data(table3[anian&0x0f]); write_com(0x80+5); write_data(table3[ayue>>4]); write_data(table3[ayue&0x0f]); write_com(0x80+8); write_data(table3[ari>>4]); write_data(table3[ari&0x0f]); write_com(0x80+0x40); write_data(table3[ashi>>4]); write_data(table3[ashi&0x0f]); write_com(0x80+0x40+3); write_data(table3[afen>>4]); write_data(table3[afen&0x0f]); write_com(0x80+0x40+6); write_data(table3[amiao>>4]); write_data(table3[amiao&0x0f]); /* write_com(0x80+2); write_data(table3[table6[6]>>4]); write_data(table3[table6[6]&0x0f]); write_com(0x80+5); write_data(table3[table6[4]>>4]); write_data(table3[table6[4]&0x0f]); write_com(0x80+8); write_data(table3[table6[3]>>4]); write_data(table3[table6[3]&0x0f]); write_com(0x80+0x40); write_data(table3[table6[2]>>4]); write_data(table3[table6[2]&0x0f]); write_com(0x80+0x40+3); write_data(table3[table6[1]>>4]); write_data(table3[table6[1]&0x0f]); write_com(0x80+0x40+6); write_data(table3[table6[0]>>4]); write_data(table3[table6[0]&0x0f]); // buzzer(); */ } void set_rtc() //设定时间 { uchar *p,i; p=write_table; write_byte(0x8e,0x00); for(i=0;i<7;i++) { write_byte(*p,table4); p++; } /* write_byte(0x80,0x00); write_byte(0x82,0x01); write_byte(0x84,0x02); write_byte(0x86,0x03); write_byte(0x88,0x04); write_byte(0x8c,0x05); write_byte(0x8e,0x80); */ } void main() { uint num; init(); write_com(0x80); for(num=0;num<10;num++) { write_data(table5[num]); } write_com(0x80+0x40); for(num=0;num<8;num++) { write_data(table7[num]); } set_rtc(); while(1) { // buzzer(); if(read_flag) { // buzzer(); read_flag=0; read_rtc(); } } } void timer0() interrupt 1 { static int i=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; i++; if(i==20) { i=0; read_flag=1; } } |
|
相关推荐
11个回答
|
|
你的DS1302设置时间函数有问题, write_byte(*p,table4);这句错了,改为write_byte(*p,table4[i]);其他的没什么大问题。下载运行能正常显示。
|
|
|
|
依然落叶飘零 发表于 2014-4-8 18:30 还是不行啊,你下载能正常运行? |
|
|
|
要找出是DS1302的问题还是LCD的问题? 先不对DS1302进行操作,单独往LCD写数据,看能不能正常显示,如果正常,问题就在DS1302上,如果不能,先把LCD的问题搞定。
|
|
|
|
首先是指定点的点亮与熄灭,确定你的寄存器操作有没有问题,没有问题之后再试着安装编码的形式显示。
|
|
|
|
|
|
|
|
你打开文件,用复件3里面的proteus 下载复件旁边的文本文件——新建文本文档里面的程序。 下载之后你看看,秒在加到10+时会出现乱码 加到20也是乱码。
|
|
|
|
LCD没问题。。主要是DS1302中的阅读程序中可能出现问题。 |
|
|
|
你的DS1302数据读取函数read_rct()错误,数据多移动了一位.你本来的程序是这样的,
改为先移位再读取数据;
|
|
|
|
成功了,细节决定一切。 谢谢你的耐心帮助。旁观者清,但我以后会更加地细致。再次谢谢! |
|
|
|
细节决定成败,我也是弄了很久才发现的。 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
510 浏览 0 评论
792 浏览 0 评论
833 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
797 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1244 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11812 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 08:03 , Processed in 0.853207 second(s), Total 91, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号