当前位置: 首页 > article >正文

八段数码管动态显示(汇编+C语言)

显示数码管60S倒计时程序。

原理

数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱 动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp "的同名端连在一起,另 外为每个数码管的公共极 COM 增加位选通控制电路,位选通由各自独立的 I/O 线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是 那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我 们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数 码管就不会亮。 透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显 示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为 1~2ms, 由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同 时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会 有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且 功耗更低。

电路图

汇编代码

        ORG 0000H;程序入口地址AJMP	START;跳转到START程序ORG 0040HSTART:  MOV   DPTR, #TAB;建表将TAB所在的地址赋值给DPTRMOV   R1, #6;十位MOV   R0, #0;个位AJMP  DISPLAY
TENS:	MOV   R0, #10;个位填充,十位减1DEC   R1
UNITS:	DEC   R0;个位减1同时填充R5MOV   R5, #250
DISPLAY:MOV   A,R1MOVC  A,@A+DPTR;基地变址寻址MOV   P3,#0FEHMOV   P2,A;显示LCALL DELAYMOV   A,R0MOVC  A,@A+DPTR;基地变址寻址MOV   P3,#0FDHMOV   P2,A;显示LCALL DELAYDJNZ  R5,DISPLAY;每显示一个数用时大约1sCJNE  R0,#0,UNITS;个位0不等于跳转CJNE  R1,#0,TENS;十位0不等于跳转SJMP START DELAY:  MOV   R7,#250
D1:	    MOV   R6,#4
D2:	    DJNZ  R6,D2DJNZ  R7,D1RET
TAB:DB   3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
END

C语言代码

#include <REGX52.H>unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴不带小数点段码表void delay_ms(unsigned int ms)//ms延时函数
{unsigned int i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);}void main()
{while(1){unsigned char i,j;for(i=60;i>0;i--)//60s{for(j=100;j>0;j--)//大约1s{P3=0xfe;//位选P2=tab[i/10];//显示十位delay_ms(5);P3=0xfd;//位选P2=tab[i%10];//显示个位delay_ms(5);}}}
}

http://www.lryc.cn/news/2418918.html

相关文章:

  • FastDB 很难得的一篇分析
  • 使用StretchBlt之前一定要用SetStretchBltMode(COLORONCOLOR)
  • 2款安卓漫画阅读器横评:漫画阅读软件哪个好用
  • 世界各国与中国时差查询
  • Sailfish OS
  • 离散数据编码方式总结(OneHotEncoder、LabelEncoder、OrdinalEncoder、get_dummies、DictVectorizer、to_categorical的区别?)
  • java.lang.Integer
  • linux进程优先级与nice,Linux之renice和nice调整进程的优先级
  • ActivityThread源码分析
  • 【工作笔记0010】asp.net后台Request.QueryString获取的url中文参数乱码解决方案
  • UART简介
  • C语言:从零基础到精通—轻松写出第一个C语言程序
  • Xtreme.Toolkit.Pro
  • _Linux结束进程到底有多少种方法?
  • windows密码抓取的多种方法
  • OSIP协议栈(及eXoSIP,Ortp等)使用入门(2)
  • 电路方案分析(七)电源入口欠压保护(阈值设定电路)
  • API::CreateProcess()创建进程失败 返回1
  • 企业网站建设需要多少钱?定制开发费用报价在3000-4000元
  • 什么是线程和应用?线程和进程区别是什么?
  • 软件性能测试怎么做?有哪些常见的技术指标?
  • Python接口测试实战- 接口测试理论
  • Android组织首选项PreferenceScreen及首选项框架 ListPreference
  • http://www.51voa.com/VOA_Special_English/
  • 使用VMware安装Ubuntu虚拟机和VMware Tools
  • 09 内核开发-避免冲突和死锁-spinlock
  • ioctl函数详细说明
  • input标签的各种属性
  • PostgreSQL数据库事务系统——获取事务ID
  • Delphi各个版本的官方下载地址