;用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。

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

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

;观看的效果如何呢 ?

;前面的,定时 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单片机串口方式0接两个74LS164显示数码管,0-99动态显示(用C语言)...

    //*************************************// // 74HC164串口显示实验   proteu仿真    // //    PBG                ...

  2. proteus仿真arduino控制两位数码管

    前面我们用arduino控制一位数码管,知道了控制数码管的原理.这里我们增加了一位,其显示的原理基本一样.只不过本质上不是两位同时点亮,而是轮换点亮.下面是原理图: 我们来看看代码的实现: int P ...

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

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

  4. 洗衣机控制系统c语言编程,采用C语言编辑基于51单片机的全自动洗衣机控制系统毕业论文.doc...

    采用C语言编辑基于51单片机的全自动洗衣机控制系统毕业论文 深 圳 大 学 本 科 毕 业 论 文(设计) 题目: 基于单片机设计的全自动 洗衣机控制器 姓名: 郑嘉泽 专业: 电子信息工程 学院: ...

  5. 8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8。

    8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8. 程序: #include<reg51.h> #include<absacc.h> #def ...

  6. 【单片机仿真项目】外部中断0和1控制两位数码管进行计数

    目录 1.外部中断0和1控制两位数码管进行计数 keil 代码 2.proteus 原理图 3.gif 动态图

  7. c语言控制4位数码管,用stm32控制4位数码管_stm32控制共阴数码管

    描述 1.stm32控制4位共阳数码管输出计数 用stm32控制4位数码管,需要用到GPIO口 PA0~PA11共12个引脚.首先我们来看看数码管的原理图. 因为是共阳所以12,9,8,6为电源输入, ...

  8. 两个74HC595D驱动芯片控制三位数码管显示

    两个74HC595D驱动芯片控制三位数码管显示 概述 一.数码管引脚及使用概述 1.1位数码管显示方式 2.3位数码管 3.3位数码管电路图 二.74HC595D引脚及使用概述 1. 74HC595引 ...

  9. arduino控制一位数码管、控制二位数码管动态显示(用不到中断程序)

    目的: 1.利用arduino控制一位共阳极数码管显示 2.利用arduino控制二位共阳极数码管显示 前言: 前段时间,在网上看到了一个视频,是关于二位数码管动态显示的视频,感觉很新奇,就想把它做出 ...

最新文章

  1. cin,getline用法和不同
  2. 卷及神经网络CNN for image retrieval
  3. TCP协议连接过程详解
  4. vue 滑动置顶功能_VUE 实现滚动监听 导航栏置顶的方法_蜡烛_前端开发者
  5. mysql 分组查询原理,MySQL分組查詢Group By實現原理詳解
  6. Network Emulation(网格模拟)
  7. 遇到一个gcc编译器版本导致的运行结果有差异的问题
  8. WorkerMan 入门学习之(三)基础教程-Timer类的使用
  9. java:ToStringBuilder.reflectionToString重写toString
  10. 魏尔斯特拉斯---严谨的典范
  11. Noip 2016 蛋碎一地晚节不保
  12. 双系统平板电脑android升级吗,平板电脑双系统好不好 平板电脑双系统优缺点【详细介绍】...
  13. 嵌入式Linux开发8——UART串口通讯
  14. CRS-0804:PROC-26: Error while accessing the physical storage
  15. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!
  16. 蓝牙认证测试调试记录
  17. SpringBoot《第二课》
  18. Spring中的@Scheduled
  19. 自学 Linux 8—文件系统简介之 Linux 下的文件系统
  20. 在oracle中要谨慎使用when others then(二)

热门文章

  1. 2022-2027年中国工业缝纫机行业发展监测及投资战略研究报告
  2. 小明Q1投影仪好不好?适合新手小白使用吗?
  3. flutter布局组件:wrap组件实现瀑布流
  4. 媒体人的不二选择,你确定不来看一看吗?
  5. 对于30种机械手的归类与分析——从假肢(Prosthetic)和机器人(Robotics)两个应用领域讨论
  6. 1.Excel查询重复数据
  7. 关于微信等app请求服务器,file_get_contents()函数和CURL用法
  8. Trias为什么具有良好的可扩展性?
  9. 信息家电嵌入式软件技术框架
  10. 大数据产业发展的国际经验