完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define uchar unsigned char #define uint unsigned int ***it sck=P1^0; ***it io=P1^1; ***it rst=P3^6; ***it smgen=P2^3; unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x10}; unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78}; uchar time_data[7]={10,6,4,17,11,58,30}; uchar time_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; uchar disp[8]; void write_ds1302_byte(uchar dat); void write_ds1302(uchar add,uchar dat); uchar read_ds1302(uchar add); void set_rtc(void); void read_rtc(void); void time_pros(void); void delay_50ms(uint t) { uint j; for(;t>0;t--) for(j=6245;j>0;j--); } void write_ds1302_byte(uchar dat) { uchar i; for(i=0;i<8;i++) { sck=0; io=dat&0x01; dat=dat>>1; sck=1; } } void write_ds1302(uchar add,uchar dat) { rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); write_ds1302_byte(dat); rst=0; _nop_(); io=1; sck=1; } uchar read_ds1302(uchar add) { uchar i; uchar value; rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); for(i=0;i<8;i++) { value=value>>1; sck=0; if(io) value=value|0x80; sck=1; } rst=0; _nop_(); sck=0; _nop_(); sck=1; io=1; return value; } void set_rtc(void) { uchar i,j; for(i=0;i<7;i++) { j=time_data[i]/10; time_data[i]=time_data[i]%10; time_data[i]=time_data[i]+j*16; } write_ds1302(0x8e,0x00); for(i=0;i<7;i++) { write_ds1302(time_add[i],time_data[i]); } write_ds1302(0x8e,0x80); } void read_rtc(void) { uchar i; for(i=0;i<7;i++) { time_data[i]=read_ds1302(read_add[i]); } } void time_pros(void) { disp[0]=time_data[6]%16; disp[1]=time_data[6]/16; disp[2]=17; disp[3]=time_data[5]%16; disp[4]=time_data[5]/16; disp[5]=17; disp[6]=time_data[4]%16; disp[7]=time_data[4]/16; } void display(void) { uchar i; for(i=0;i<8;i++) { P1=smg_du[disp[i]]; P2=smg_we[i]; delay_50ms(20); } } void main(void) { set_rtc(); while(1) { smgen=0; read_rtc(); smgen=1; time_pros(); display(); } }
|
|
相关推荐
6个回答
|
|
unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};
出现图中问题的一个原因是上面这个数组。动态显示,也就是某一时刻只能让一个数码管显示(有特殊情况除外),你用的数码管是共阴极的,所以上面的数组应该改成{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f},或者顺序反过来。 你先改过来试试看,我不保证只有这么一个原因,但是我说的是其中的一个原因。 希望对你有帮助 |
|
|
|
你的回复很有用,多谢~~
|
|
|
|
进过本人测试发现你的问题多多:第一:位选错误,改为{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}。第二:你管脚重复因此出错,因此全部数据都显示为F,DS1302驱动程序没问题。第三:延时见时间过长,导致数码管明显闪烁显示。第四:显示中间一横“—”的段码不是0x10,而是0x40.
|
|
|
|
显示很正常呢
P2口为0x38 片选信号 所以中间的三个数码管是灭的 P0口为0x71 段选信号 所以显示的是aefg是亮的 正好显示字符"F" PS: 记得回答过这个问题呢 原来楼主发了三个一样的帖子。。。。 |
|
|
|
路过,楼主加油
|
|
|
|
木有啊,是两个,第一个没附带源文件,就又发了一个。很感谢你的回答,多谢~~ |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
811 浏览 0 评论
525 浏览 0 评论
嵌入式学习-搭建自己的ubuntu系统之ubuntu网络设置
646 浏览 0 评论
龙芯中科胡伟武:3B6600 八核桌面 CPU 性能将达到英特尔中高端酷睿 12~13 代水平
710 浏览 0 评论
树莓派Pico 2发布,搭载RP2350双核RISC-V和Arm Cortex-M33微控制器!
670 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10719 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-17 19:55 , Processed in 0.782191 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号