;用51单片机控制 2位数码管动态显示 00 ~ 99。

;从 00 开始显示,显示数字每隔一段时间加 1,一直到 99,然后回到 00。

;从 00 到 10 每隔 100ms 加 1;

;从 10 到 20 每隔 200ms 加 1;

;其它依此类推;

;从 90 到 99 然后到 00 每隔 1s 加 1。

;做而论道用汇编语言编写的程序如下:

ORG   0000H

JMP   MAIN

ORG   000BH

JMP   T0_INT

MAIN:

MOV   TMOD, #01H

MOV   TH0, #HIGH(65536-50000)

MOV   TL0, #LOW(65536-50000)

SETB  TR0

SETB  ET0

SETB  EA

MOV   B, #2

MOV   R2, B

MOV   R4, #0

MOV   R5, #0

MOV   R6, #2

LOOP:

MOV   A, R4

ADD   A, #(TAB - $ - 3)

MOVC  A, @A + PC

MOV   P0, A

MOV   P2, #2

DJNZ  R7, $

DJNZ  R7, $

MOV   P2, #0

MOV   A, R5

ADD   A, #(TAB - $ - 3)

MOVC  A, @A + PC

MOV   P0, A

MOV   P2, #1

DJNZ  R7, $

DJNZ  R7, $

MOV   P2, #0

SJMP  LOOP

;---------------------------------------

TAB:      ;共阳段码

DB  0C0H, 0F9H, 0A4H, 0B0H

DB  099H, 092H, 082H, 0F8H

DB  080H, 090H

;---------------------------------------

T0_INT:

MOV   TH0, #HIGH(65536-50000)

MOV   TL0, #LOW(65536-50000)

DJNZ  R2, T0_END

MOV   R2, B

INC   R4

CJNE  R4, #10, T0_END

MOV   R4, #0

INC   R6

INC   R6

CJNE  R6, #22, T_B

MOV   R6, #2

T_B:

MOV   B, R6

INC   R5

CJNE  R5, #10, T0_END

MOV   R5, #0

T0_END:

RETI

;---------------------------------------

END

;程序中,用 T0 定时50ms(假设晶振频率是 12MHz)。

;大家都知道,每当中断 20 次,就是 1s。

;如果这个 20,不是固定的常数,而是个变量,分别是:

; 2、4、6...、20,那么,即可实现定时 100ms、200ms、...。

;程序中,使用寄存器B,保存这个变量,初始时,令其为 2。

;以后,每当计数到十位数发生变化时,就把 B 加上 2。

;加到了 22,就再令其为 2。

;程序仿真执行的截图如下:

;图片链接:http://xiangce.baidu.com/picture/detail/beb6214cc0782f2e85f5ba61dd2af810553a9272

;图中使用了共阳数码管。

;观看的效果如何呢 ?

;前面的,定时 100ms、200ms...,太快,看不很准。

;但是,可以看出来,计数速度,是逐渐减慢的。

;等到了 90~00,就可以看到,每隔一秒,跳一个字,还是很准确的。

;本题目来自:http://zhidao.baidu.com/question/570496034.html

;提问者,是想要 C 语言的程序,但是,题目中,也没有说清楚,呵呵,白忙了。

----

C 语言程序如下:

#include

char n1 = 0, n2 = 0;     //用于显示

char n_t1 = 0, n_t2 = 2; //用于计数

char code seg[] = {      //共阳段码

0xC0, 0xf9, 0xa4, 0xb0, 0x99,

0x92, 0x82, 0xf8, 0x80, 0x90}; //0 ~ 9

void Main(void)

{

char  i;

TMOD = 0x01;

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

TR0 = 1;

ET0 = 1;

EA = 1;

while (1) {

P0 = seg[n1]; P2 = 2; for(i = 0; i < 100; i++); P2 = 0;

P0 = seg[n2]; P2 = 1; for(i = 0; i < 100; i++); P2 = 0;

}

}

T0_INT()   interrupt 1

{

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

n_t1++;

if (n_t1 == n_t2)  {

n_t1 = 0;

n1++;

if (n1 == 10) {

n1 = 0;

n_t2 += 2;

if (n_t2 == 22) n_t2 = 2;

n2++;

if (n2 == 10) n2 = 0;

}

}

}

单片机动态从00到99C语言,用51单片机控制 2位数码管动态显示 00 ~ 99相关推荐

  1. 单片机数码管从00到99C语言_用51单片机控制 2位数码管动态显示 00 ~ 99。

    ;用51单片机控制 2位数码管动态显示 00 ~ 99. ;从 00 开始显示,显示数字每隔一段时间加 1,一直到 99,然后回到 00. ;从 00 到 10 每隔 100ms 加 1: ;从 10 ...

  2. 51单片机电机测速程序c语言,基于51单片机光电编码器测速.doc

    基于51单片机光电编码器测速 PAGE PAGE 2 课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器 ...

  3. 51单片机74ls273并行输出地址c语言程序,51单片机I/O口的扩展问题:使用 锁存器74LS273连接后还是只有8个端口,为什么说是扩展呢?...

    满意答案 a26264679 2014.04.21 采纳率:44%    等级:8 已帮助:313人 用8255扩展之后就是PA,PB,PC了,怎么还会只有8个端口呢? 用8255扩展51单片机 I/ ...

  4. 单片机从00到99c语言,跪求单片机0~99数码管显示用C语言编写的程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define uint unsigned int #define uchar unsigned char uint temp; sbi ...

  5. 51单片机扩展io口实验c语言,【51单片机】普通I/O口模拟SPI口C语言程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //---------------------- ...

  6. 单片机并口应用实验c语言,用51单片机编写一个并行口实验

    满意答案 wxl1215 2013.11.11 采纳率:49%    等级:12 已帮助:17031人 #include #define uchar unsigned char #define uin ...

  7. 51单片机的四路抢答器c语言,用51单片机制作4路抢答器

    此抢答器具有限时抢答,超时无效的特点,并可以对主持人未喊开始而提前抢答的犯规情况作出判断. 由于用了单片机,所以电路很简单.懒得写译码程序,也不想做驱动电路.干脆直接用了一片74LS48译码驱动器来驱 ...

  8. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序: #include<reg52.h>   void main(void)   {    EA=1;      //开放总中断 ...

  9. 【C 语言实现51单片机计时器】

    C语言实现51单片机计时器 代码如下 接线如下 代码如下 #include <reg51.h>sbit Hc38A=P2^2; sbit Hc38B=P2^3; sbit Hc38C=P2 ...

最新文章

  1. 使用 qemu 搭建内核开发环境
  2. 杜克大学医学院禁止公开场合说中文?涉事负责人被勒令下台...
  3. Android的配置界面PreferenceActivity
  4. 使用virt-install 创建Xen虚拟机
  5. open cv+C++错误及经验总结(十二)
  6. ISA2000资料大全(详细)
  7. 抢先式多线程网络蜘蛛
  8. 使用Chrome Frame插件解决IE浏览器兼容问题
  9. 记录一下工作中常用的ramda处理数据方法
  10. Android手机无法上网怎么办,为什么android手机已经连接WIFI还是不能上网?
  11. 天翼云监控客户pc端及手机端下载安装教程
  12. GX works2 三菱PLC 显示注释后代码行变宽的解决方法
  13. UVa - 11283 - PLAYING BOGGLE
  14. 微信公众号数据2019_2019年5月全国房地产微信公众号25强排行榜
  15. 北京大学优秀计算机论文,计算机系在ESEC/FSE'20上发表的论文获得ACM SIGSOFT杰出论文奖...
  16. matlab在命令行注册,在命令行窗口中输入语句
  17. HTML,CSS,JS
  18. 旺旺机器人的快捷短语_机器人配置和我的快捷短语
  19. 汽车制造行业工厂数据、互联数据和移动数据存储解决方案
  20. spring cloud整合feign和nacos报错:No Feign Client for loadBalancing defined. Did you forget to include

热门文章

  1. Telerik DevCraft crack,改进了 PDF 处理
  2. 计算机研究生就业方向之当老师(中小学)
  3. flexsim--第二周
  4. 《乐高EV3机器人搭建与编程》——1.6 小结
  5. 自适应滤波器的原理及输入序列总结
  6. 软件测试找了两个月都没找到工作怎么办?
  7. Linux云计算——传统虚拟化——EXSI
  8. 学习状态通道,Part-2:App 定制型状态通道
  9. avada functions.php,WooCommerce & Avada 主题: [已解决] 社交分享在产品类别
  10. 限制对比度自适应直方图均衡化算法(CLAHE)实现