完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
因为我想做个4位的精确时钟,但不知道自己程序错在哪,为之苦恼很久,在贵论坛找到@pusa分享的DS12C887数码管的程序,因为没有注释有些地方不懂,想请教下大家。程序如下:
#include #define uchar unsigned char #define ulong unsigned long ***it dula=P2^6; ***it wela=P2^7; ***it dscs=P1^4; ***it dsas=P1^5; ***it dsds=P1^7; ***it dsrw=P1^6; ***it s1=P1^0; ***it s2=P1^1; ***it s3=P1^2; void xianshi(uchar add,uchar shu); uchar code table_shu[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code table_add[]={0x00,0xFE,0xFD,0xFB, 0xF7,0xEF,0xDF}; uchar code table_wela[]={0xff,0xe0,0xd0,0xc8, 0xc4,0xc2,0xc1 }; uchar shu_num,s1_num,s1_flag; uchar shi,fen,miao; void delay_ms(uchar t) { uchar x,y; for(x=t;x>0;x--) for(y=110;y>0;y--); } void write_ds(uchar add,uchar date) { dscs=0; dsas=1; dsds=1; dsrw=1; P0=add; dsas=0; dsrw=0; P0=date; dsrw=1; dsas=1; dscs=1; } void set_time() { write_ds(0,55); write_ds(2,59); write_ds(4,23); } void init() { EA=1; EX1=1; IT1=1; dula=0; wela=0; write_ds(0x0A,0x20); write_ds(0x0B,0x06); set_time(); } void xianshi(uchar add,uchar shu) { uchar s,g; s=shu/10; g=shu%10; wela=1; P0=table_add[add]; wela=0; delay_ms(1); P0=0xff; dula=1; P0=table_shu[g]; dula=0; delay_ms(1); wela=1; P0=table_add[add+1]; wela=0; delay_ms(1); P0=0xff; dula=1; P0=table_shu[s]; dula=0; delay_ms(1); } void shanshuo(uchar add) { wela=1; P0=table_add[add]; wela=0; delay_ms(1); P0=0xff; dula=1; P0=0x00; dula=0; delay_ms(1); wela=1; P0=table_add[add+1]; wela=0; delay_ms(1); P0=0xff; dula=1; P0=0x00; dula=0; delay_ms(1); } void keyscan() { if(s1==0) { delay_ms(5); if(s1==0) { s1_num++; s1_flag=1; while(!s1); } } switch(s1_num) { case 1: xianshi(1,miao); break; case 2: xianshi(3,fen); break; case 3: xianshi(5,shi); break; case 4: s1_num=0; s1_flag=0; break; } if(s1_num!=0) { if(s2==0) { delay_ms(5); if(s2==0) { while(!s2); switch(s1_num) { case 1: miao++; if(miao==60) miao=0; xianshi(1,miao); write_ds(0,miao); break; case 2: fen++; if(fen==60) fen=0; xianshi(3,fen); write_ds(2,fen); break; case 3: shi++; if(shi==24) shi=0; xianshi(5,shi); write_ds(4,shi); break; } } } if(s3==0) { delay_ms(5); if(s3==0) { while(!s3); switch(s1_num) { case 1: miao--; if(miao==-1) miao=59; xianshi(1,miao); write_ds(0,miao); break; case 2: fen--; if(fen==-1) fen=59; xianshi(3,fen); write_ds(2,fen); break; case 3: shi--; if(shi==-1) shi=23; xianshi(5,shi); write_ds(4,shi); break; } } } } } uchar read_ds(uchar add) { uchar ds_date; dsas=1; dsds=1; dsrw=1; dscs=0; P0=add; dsas=0; dsds=0; P0=0xff; ds_date=P0; dsds=1; dsas=1; dscs=1; return ds_date; } void main() { init(); while(1) { keyscan(); if(s1_flag==0) { keyscan(); shi=read_ds(4); fen=read_ds(2); miao=read_ds(0); xianshi(5,shi); xianshi(3,fen); xianshi(1,miao); } } } 其中显示部分P0=table_add[add];P0=table_shu[g];P0=table_add[add+1];P0=table_shu[s];是什么意思?? |
|
相关推荐
4个回答
|
|
本帖最后由 咖啡碎泡 于 2016-2-24 14:08 编辑
我自己的程序是这样的 ,是否可以代替他的显示部分 void display_smg(uchar qian,uchar bai,uchar shi,uchar ge)//以下显示程序不加887显示是正常的 { wela1 = wela2 = wela3 = wela4 = 0;//没用锁存器,wela1-4代表单片机的某4脚 wela4 = 1; P1=table[qian]; delayms(5); wela4 = 0; P1 = 0x00; wela3=1; P1=table[bai]; delayms(5); wela3 = 0; P1=0x00; wela2=1; P1=table[shi]; delayms(5); wela2 = 0; P1=0x00; wela1=1; P1=table[ge]; delayms(5); wela1 = 0; P1=0x00; } |
|
|
|
懂得网友麻烦告诉我下吧
|
|
|
|
|
|
完全没人啊
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
506 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
445 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之开发板测试
394 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之网络socket程序编程
883 浏览 0 评论
飞凌嵌入式-ELFBOARD-RGB LCD屏接口的PCB设计要点
889 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11728 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-16 21:22 , Processed in 0.602095 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号