完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的程序是设定按一下键之后会出现光标和反白,可是事实并不是这样,下面是我的源程序,求各位指点,谢谢。
#include #include #define uint unsigned int #define uchar unsigned char ***it lcdrs=P3^5; ***it lcden=P3^4; ***it lcdwr=P3^6; ***it lcdp***=P3^7; ***it dula=P2^6; ***it wela=P2^7; ***it sclk=P0^0; ***it tio=P0^1; ***it trst=P0^2; ***it key1=P3^0; uchar num,k; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*ds1302*/ void ds_write(uchar com,uchar date) { uchar i; trst=0; sclk=0; trst=1; for(i=0;i<8;i++) { sclk=0; tio=com&0x01; sclk=1; com>>=1; } for(i=0;i<8;i++) { sclk=0; tio=date&0x01; sclk=1; date>>=1; } } uchar ds_read(uchar com) { uchar i,date; trst=0; sclk=0; trst=1; for(i=0;i<8;i++) { sclk=0; tio=com&0x01; sclk=1; com>>=1; } for(i=0;i<8;i++) { sclk = 0; //拉低时钟总线,产生下降沿,DS1302把数据放到TIO上 date >>= 1; //右移一位 if(tio) date |= 0x80;//读取数据,从最低位开始 sclk = 1; //拉高时钟总线,以备下一次产生下降沿 } return date; } /*数据转化BCD*/ uchar D_B(uchar date) { uchar dat1,dat2; dat1=date/10; dat2=date%10; date=dat2+dat1*16; return date; } /*BCD转化数据*/ uchar B_D(uchar date) { uchar dat1,dat2; dat1=date/16; dat2=date%16; date=dat2+dat1*10; return date; } /*向ds1302写数据*/ void write_ds1302() { ds_write(0x8e, 0);//清除写保护 ds_write(0x80, D_B(50));//30秒(并且进行BCD码转换) ds_write(0x82, D_B(59));//15分 ds_write(0x84, D_B(23));//19时 ds_write(0x86, D_B(30)); ds_write(0x88, D_B(7)); ds_write(0x8a, D_B(36)); ds_write(0x8e, 0x80);//开写保护 } /*向ds1302读取数据*/ void read_ds1302() { uchar miao,fen,shi,nian,yue,ri; ds_write(0x8e, 0); //清除写保护 miao = B_D(ds_read(0x81));//读秒寄存器(并且进行BCD码转换) fen = B_D(ds_read(0x83));//读分寄存器 shi = B_D(ds_read(0x85));//读时寄存器 ri = B_D(ds_read(0x87)); yue = B_D(ds_read(0x89)); nian = B_D(ds_read(0x8b)); ds_write(0x8e, 0x80);//开写保护 } /*12864*/ /*写指令*/ void write_com(uchar com) { lcdrs=0; lcdwr=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } /*写数据*/ void write_dat(uchar dat) { lcdrs=1; lcdwr=0; lcden=0; P0=dat; delay(5); lcden=1; delay(5); lcden=0; } /*设定显示位置*/ void lcd_pos(uchar x,uchar y) { char pos; if(x==0) {x=0x80;} if(x==1) {x=0x90;} if(x==2) {x=0x88;} if(x==3) {x=0x98;} pos=x+y; write_com(pos); } /*初始化设定*/ void lcd_init() { // wela=1; // P0=0; wela=0; // dula=1; // P0=0; dula=0; lcdp***=1; write_com(0x30); delay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x01); delay(5); } void keyscan() { if(key1==0) { delay(5); if(key1==0) { while(!key1) num++; k=1; switch(num) { case 1:write_com(0x0f); lcd_pos(1,4); break; } } } } void display_1302() { keyscan(); if(k==0) { uchar shi,fen,miao,nian,yue,ri; write_com(0x90); write_dat(miao/10+0x30); write_dat(miao%10+0x30); write_dat(':'); write_dat(fen/10+0x30); write_dat(fen%10+0x30); write_dat(':'); write_dat(shi/10+0x30); write_dat(shi%10+0x30); write_com(0x80); write_dat('2'); write_dat('0'); write_dat(nian/10+0x30); write_dat(nian%10+0x30); write_dat('-'); write_dat(yue/10+0x30); write_dat(yue%10+0x30); write_dat('-'); write_dat(ri/10+0x30); write_dat(ri%10+0x30); } } void main() { lcd_init(); write_ds1302(); while(1) { read_ds1302(); display_1302(); } } |
|
相关推荐 |
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
54 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
395 浏览 0 评论
439 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1265 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
529 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11750 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 09:17 , Processed in 0.645285 second(s), Total 61, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号