八位数码管动态显示程序

发布者:mancozc最新更新时间:2012-10-27 来源: 21ic 关键字:八位数码管  动态显示  静态显示 手机看文章 扫描二维码
随时随地手机看文章

这个是51hei开发板专区里转来的一个程序,注释很详细,运行也没有问题,原文地址:http://www.51hei.com/bbs/dispbbs.asp?boardid=10&id=4140

/*动态数显的设计思路,首先是我们要先知道怎样才能使哪个位亮,显示的段是什么数值,接下来就是中断时间
的问题了,设计步骤如下,如果要让八个数码管静态显示1到8,我们可以修改中断时间,如把50000改成100或更低*/

#include  
#include
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;    
sbit wei=P2^7;

uchar  a,numw,numd;
uchar code tabled[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; /*第二步骤,创建段显数值的对码表0~9数值.如果要显示1~8数值,最好多加前后两位数0跟9,
      因为后面++移位时就能按我们常规顺序亮下去,至于如何显示对应数值请先看数码显示电路图*/ 
uchar code tablew[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f}; //第二步骤,创建位显,就是显示的位置,这个码表相对简单,用二进制表示11111110~01111111,是0的为八位数显管的位置
void main()
{
 a=0;            //定义个时间函数
 numw=0;     //附位显初值为0位
 numd=0;     //附段显初值为0位
 
 TMOD=0X01;    //第四步骤,附中断暂存器初值
 TH0=(65535-50000)/256; //附中断请求时间初值,高8位
 TL0=(65536-50000)%256; //附中断请求时间初值,低8位
 EA=1;     //开启总中断
 ET0=1;     //开启定时中断
 TR0=1;     //启动定时中断
 while(1)
 {
  if(a==10)   //第三步骤,执行速度,如果等20差不多是1秒,则往下执行,相当于单位数值亮的时间
  {
   a=0;   //重新附值初值0
   numd++;   //段显值++
   if(numd==9)  //如果段值在对码表第9位则转下执行 
    numd=1;  /*重新附值段显值对应对码表第1位,因为++所以0位并不在数码管中显示.
       如果要显示,也会因为++而在第二轮中显示出*/
   duan=1;   //开启段显端
   P0=tabled[numd];//附段显P0值对应段显值对码表
   duan=0;   //锁存
   wei=1;   //开启位显端
   P0=tablew[numw];//附位显P0值对应位显值对码表
   wei=0;   //锁存
   numw++;   //相当于位显移位
   if(numw==8)  //如果位显值到对应位显对码表第八位则转下执行
    numw=0;  //重新附值位显值对应对码表第0位起
/*

下面是简单的单个数码管显示例证 第一骤, 修改后在第三步骤内
#include"reg52.h"
#include"intrins.h"

sbit duan=P2^6; //段显端口
sbit wei=P2^7; //位显端口

void main()
{
 //P0=0xff; 数码管不显示任何信号,默认情况下通电本身就不显示,可以不写
 duan=1;  //开启段显端口
 P0=0x06; //附值段显数值为1,可以查阅数码管电路图相对应显示的对码表
 duan=0;  //锁存,保持上一步段显状态,硬件说明请查阅74HC573功能
 wei=1;  //开启位显端口
 P0=0xfe; //附值位显位置,01111111,左边第一位,为0的显示
 wei=0;  //锁存,保持上一步位显状态,硬件说明请查阅74HC573功能
}
*/
 
  }
 }
}

void timer0() interrupt 1 /*第四步骤,中断时间函数这个相当于移位数显的速度,速度够快,人眼就会有余辉效应,
       感觉8位数显一直在亮着,相当于正在播放的电影胶卷*/

{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 a++;
}

/*

以上有什么地方还需要改进的还请老师明示

*/
 

关键字:八位数码管  动态显示  静态显示 引用地址:八位数码管动态显示程序

上一篇:智能定时插座程序
下一篇:学习型红外遥控器汇编语言程序

推荐阅读最新更新时间:2024-03-16 13:11

多位数码管动态显示中的虚影消除
在学习动态显示时,发现有一个问题,数字是正常显示了,但是好几个数字上面,某些不应该亮的地方,有一些微微亮,导致数字显示不是很清楚,代码如下(说明:数码管可以显示8个数字,共阳,P3用于选择亮哪一个,P0用于输出数字): #include reg52.h #define uchar unsigned char //随手抄来的,虽然我只显示0-7 uchar code table = { 0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xC6,0xA1,0x86,0x8E }; uchar i; void main()
[单片机]
8051单片机典型接口电路--并行扩展静态显示电路图
下图为并行扩展静态显示电路图(3位LED静态显示电路),按下图编制显示子程序,显示数(≤255)存在内RAM 30H中。 相应的程序为:   DIR1: MOV A,30H ;读显示数   MOV B,#100 ;置除数   DIV AB ;产生百位显示数字   MOVC A,@A+DPTR ;读百位显示符   MOV DPTR,#0DFFFH ;置74377(百位)地址   MOVX @DPTR,A ;输出百位显示符   MOV A,B ;读余数   MOV B,#10 ;置除数   DIV AB ;产生十位显示数字   MOV DPTR,#TAB ;置共阳字段码表首址   MOVC A,@A+DP
[模拟电子]
8051单片机典型接口电路--并行扩展<font color='red'>静态</font><font color='red'>显示</font>电路图
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved