找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2982|回复: 0
打印 上一主题 下一主题
收起左侧

[原创]DS1302 求助

[复制链接]
跳转到指定楼层
楼主
ID:37854 发表于 2012-5-17 00:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一套程序下来LCD 就显示第一行 : : 第二行00:00:00 然后不动了 预计是LCD 显示没问题 问题应该是 处在 DS1302 的 操作上 苦想 几日都无法找出原因 才到此地求救,求各位高手指点一二。谢谢。 #include #define uchar unsigned char #define uint unsigned int sbit rs=P2^4; sbit rw=P2^5; sbit e=P2^6; sbit clk=P2^3; sbit ds=P2^2; sbit rst=P2^1; sbit bf=P0^7; uchar code shu[]="0123456789"; uchar code yihang[]=" - - "; uchar code erhang[]=" : : "; uchar i,j,miao,fen,shi,ri,yue,nian,xingqi,dsshu; void delayus(unsigned char n) { unsigned char i; for(i=0;i0;x--) for(y=100;y>0;y--); } bit lcdmang(void) //LCD 忙=1 不忙=0 { bit mang; rs=0; rw=1; e=1; delayus(4); mang=bf; e=0; return mang; } void lcddate(uchar date)//写数据 { while(lcdmang()==1); rs=1; rw=0; P0=date; delay(5); e=1; delay(5); e=0; } void lcdcom(uchar com)//写指令 { while(lcdmang()==1); rs=0; rw=0; P0=com; delay(5); e=1; delay(5); e=0; } void init() { i=0; lcdcom(0x38); lcdcom(0x0c); lcdcom(0x06); lcdcom(0x01); lcdcom(0x80+0x00); while(yihang!='\0') { lcddate(yihang); i++; delay(20); } lcdcom(0x80+0x40); i=0; while(erhang!='\0') { lcddate(erhang); i++; delay(20); } i=0; } /*LCD显示子程序部分*/ /*1302子程序部分*/ void dsxie(uchar com,uchar date)//com为命令,date为数据 { rst=0; clk=0; delay(2); rst=1; delay(2); for(i=0;i<8;i++) { clk="0; " delayus(2); ds="com&0x01; " delayus(2); clk="1; " delayus(2); com="com" >>=1; } for(i=0;i<8;i++) { clk="0; " delayus(2); ds="date&0x01; " delayus(2); clk="1; " delayus(2); date="date" >>=1; delayus(2); } rst=0; } unsigned char dsdu(uchar com) //com为命令 返回读出数据 { unsigned char dsshu; rst=0; clk=0; rst=1; delayus(2); for(i=0;i<8;i++) { clk="0; " delayus(2); ds="com&0x01; " delayus(2); clk="1;" delayus(2); com="com" >>=1; delayus(2); } for(i=0;i<8;i++) { dsshu="dsshu" >>1; delayus(2); if(ds==1) dsshu|=0x80; delayus(2); clk=1; delayus(2); clk=0; delayus(2); } rst=0; return dsshu; } void dsinit() //向LCD 写初始化数据 { dsxie(0x8e,0x00); dsxie(0x80,0x00);//miao dsxie(0x82,0x00);//fen dsxie(0x84,0x00);//shi dsxie(0x86,0x00);//ri dsxie(0x88,0x00);//yue dsxie(0x8a,0x01);//xingqi dsxie(0x8c,0x11);//nian } dsdudll(void)// 1302全部读出 { miao=(dsdu(0x81)&0x7f)/16*10+(dsdu(0x81)&0x7f)%16; fen=(dsdu(0x83)&0x7f)/16*10+(dsdu(0x83)&0x7f)%16; shi=(dsdu(0x85)&0x7f)/16*10+(dsdu(0x85)&0x7f)%16; ri=(dsdu(0x87)&0x7f)/16*10+(dsdu(0x87)&0x7f)%16; yue=(dsdu(0x89)&0x7f)/16*10+(dsdu(0x89)&0x7f)%16; nian=dsdu(0x8d)/16*10+dsdu(0x8d)%16; } void main() { init(); dsinit(); while(1) { dsdudll(); lcdcom(0x80+0x46); lcddate(shu[miao/10]); lcddate(shu[miao%10]); lcdcom(0x80+0x43); lcddate(shu[fen/10]); lcddate(shu[fen%10]); lcdcom(0x80+0x40); lcddate(shu[shi/10]); lcddate(shu[shi%10]); } }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表