单片机数码管动态显示

作者&投稿:勇隶 (若有异议请与网页底部的电邮联系)
下面是用段选和位选的数码管动态显示程序,可以参照下写法

#include <AT89X51.H>
unsigned char dispbitcnt; //数码管位码扫描变量
unsigned char second;
//秒变量
unsigned char minite;
//分变量
unsigned char hour;
//时变量
unsigned char tcnt;
//秒信号产生变量
unsigned char mstcnt;
//扫描时间变量

const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,<br> <br> <br> 0x92,0x82,0xf8,0x80,0x90};

//0123456789段码
const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,<br> <br> <br> 0xef,0xdf};

//123456位码
unsigned char dispbuf[6]={0,0,0,0,0,0};

//缓冲数组

//**************TMR0中断数码管扫描程序*********************
void Timer0() interrupt 1
{

P2=dispcode[dispbuf[dispbitcnt]];//段码
P1=dispbitcode[dispbitcnt];//位码
dispbitcnt++;
if(dispbitcnt==6)
{dispbitcnt=0;<br> }

tcnt++;
//中断产生秒信号
if(tcnt==244)
{tcnt=0;<br> <br>second++;<br> <br>if(second==60)<br> <br> {second=0;<br> <br> minite++;<br> <br> if(minite==60)<br> <br> {minite=0;<br> <br> <br>hour++;<br> <br> <br>if(hour==24)<br> <br> <br> {hour=0;<br> <br> <br> }

}

}

dispbuf[4]=second%10;

dispbuf[5]=second/10;

dispbuf[2]=minite%10;

dispbuf[3]=minite/10;

dispbuf[0]=hour%10;

dispbuf[1]=hour/10;

}
TMOD=0x01;
TL0=0x10;
TH0=0xf0;

}
///****************1ms延时程序******************
void delay_1ms(unsigned char i)
{
unsigned char j;
for(i=0;i<144;i++)
for(j=0;j<144;j++);
}

//*************主程序********************
void main(void)
{
TMOD=0x01;

TL0=0x10;
TH0=0xf0;
while(1)
{
dispbitcnt=0;

P1=0x00;
//开段码
P2=0x00;
//开位码
delay_1ms(200);
//延时
delay_1ms(200);
//延时
delay_1ms(200);
//延时
delay_1ms(200);
//延时
P2=0xff;
//关位码

EA=1;
ET0=1;
TR0=1;
while(1);
}
}

你觉得用指针方便么,我不觉的,还是习惯用数组。给你个小tip,数码管显示要记得消影哦,不然效果不理想

单片机数码管动态显示~

下面是用段选和位选的数码管动态显示程序,可以参照下写法


#include
unsigned char dispbitcnt; //数码管位码扫描变量
unsigned char second; //秒变量
unsigned char minite; //分变量
unsigned char hour; //时变量
unsigned char tcnt; //秒信号产生变量
unsigned char mstcnt; //扫描时间变量

const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
//0123456789段码
const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf};
//123456位码
unsigned char dispbuf[6]={0,0,0,0,0,0};
//缓冲数组

//**************TMR0中断数码管扫描程序*********************
void Timer0() interrupt 1
{
P2=dispcode[dispbuf[dispbitcnt]];//段码
P1=dispbitcode[dispbitcnt];//位码
dispbitcnt++;
if(dispbitcnt==6)
{dispbitcnt=0;
}

tcnt++; //中断产生秒信号
if(tcnt==244)
{tcnt=0;
second++;
if(second==60)
{second=0;
minite++;
if(minite==60)
{minite=0;
hour++;
if(hour==24)
{hour=0;
}
}
}
dispbuf[4]=second%10;
dispbuf[5]=second/10;
dispbuf[2]=minite%10;
dispbuf[3]=minite/10;
dispbuf[0]=hour%10;
dispbuf[1]=hour/10;
}
TMOD=0x01;
TL0=0x10;
TH0=0xf0;

}
///****************1ms延时程序******************
void delay_1ms(unsigned char i)
{
unsigned char j;
for(i=0;i<144;i++)
for(j=0;j<144;j++);
}



//*************主程序********************
void main(void)
{
TMOD=0x01;

TL0=0x10;
TH0=0xf0;
while(1)
{
dispbitcnt=0;

P1=0x00; //开段码
P2=0x00; //开位码
delay_1ms(200); //延时
delay_1ms(200); //延时
delay_1ms(200); //延时
delay_1ms(200); //延时
P2=0xff; //关位码

EA=1;
ET0=1;
TR0=1;
while(1);
}
}

完全可以。

你把数码管显示的程序放在定时器中断里,每中断一次只点亮一位数码管,然后下一次中断时点亮下一个数码管……就这样,在主程序中只需要一次修改显示的数据即可,不用死循环加延时的方法来显示。

...那根本没有办法显示,因为各个数码管的相应字段接在一起
答:四位一体数码管,要用数字电路的译码器驱动,像你第一个图的电路,确实只能当一位来用。但是用单片机就可四位都亮,而且显示四个不同的数。单片机采用动态扫描方式驱动,别说是四位一体,8位一体也照样驱动。当然了,你是用数字电路的思维来考虑这个问题的,还气愤地整出双片机,太有才啦!让你看...

我想用FPGA数码管显示DS18B20测量的信息。引脚怎么连接啊?
答:可以的。上面是我做的FPGA读取DS18B20的实例。DS18B20用FPGA控制有点麻烦,因为FPGA的时序处理复杂。所以你要严格遵守DS18B20的时序图,按上面标明的时序进行处理。祝你成功!

...电子音乐闹钟时间在2位片选的4位数码管上显示的程序,并能帮忙标注...
答:// 工程名称: led_Show_Key.scs;led_Show_Key.spj "在LED上显示按键"// 功能描述: 按键在LED数码管上显示 // 文件来源: 4*4键盘输入在LED数码管上的显示"// IDE环境: SUNPLUS u'nSPTM IDE 1.8.0(or later)// 硬件连接: A0---A6接LED a--g;A8-...

显示器的常见种类
答:最初,LED只是作为微型指示灯,在计算机、音响和录像机等高档设备中应用,随着大规模集成电路和计算机技术的不断进步,LED显示器正在迅速崛起,逐渐扩展到证券行情股票机、数码相机、PDA以及手机领域。LED显示器集微电子技术、计算机技术、信息处理于一体,以其色彩鲜艳、动态范围广、亮度高、寿命长、工作稳定可靠等优点,成为...

让静态数码管循环显示0到9,每个数字显示延迟半秒
答:因你没有给原理图,所以,画了一个仿真图,一位共阴数码管接在P0口,组成静态显示电路,每个数字显示0.5秒,采用定时器T0定时来实现。仿真图如下,请及时采纳。程序如下 include<reg52.h> unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char...

要令五个数码管分别显示1、2、3、4、5,单片机的P1.5引脚应输出什么...
答:这种指令输出的一二三四五六,单片的话也可以输出一个四五二三。

单片机实训总结范文5篇
答:★ 单片 机实 训心得 体会 ★ ★ 实 训总 结报 告范 文 ★ ★ 实 训总 结与心 得体会 ★ ★ 实 习实训总 结报 告 ★ ▼ 单片机实训总结范文篇一: 通过今次单片机实训,使我对单片机的认识有了更深刻的理解。系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本...

数码管显示 4位数码管从0显示到9999,然后再从0到9999计数,并且在显示完...
答:将按键插入原位置,使焊角插入焊孔并露出尖端部分,用电烙铁将其与焊孔焊牢,装上键帽即可。2012-7-19 16:48:03vdeatguamkj2805860736k楔ǒ力k楔ǒ力iㄎst‘擐uo洄z榨lm绰数码管显示 4位数码管从0显示到9999,然后再从0到9999计数,并且在显示完一次后,以-**-形式显示计数次数 ...

...汇编语言设计计数器(要求从0~9999,在数码管上显示)!!!
答:本设计还包含数码管显示部分,可直接显示时间可方便观察。通过这次课程设计,使我得到了一次用专业知识和专业技能去分析问题、解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及用汇编语言设计程序的思路技巧等方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。六、参考文献...

运用51单片机实现2位8段数码管显示00-99,数码管的段选择数据由P0口控制...
答:根据使用情况来讲: 使用上来说很流畅,不过机器的发热量有些大,尤其是玩了半小时3D游戏或者是看了720P的视频的时候,可以明显感觉到热量,相机那块比较热。 因为平常经常拿手机看片,发现看了90分钟以上的时候,会发现视频和音频不同步的情况,估计是温度升高导致机能下降导致的。不过一般情况下都没问...