/*数码管拉幕显现计数我曾经初学数码管时就传闻,
可是那时候由于根底不太好,一时没有想出来,今日
看到工厂样品室的恒温烙铁上面的(温度计)数码管
便是开机拉幕显现,感觉挺不错的,我就想了一下它程序
原理,然后真的就写出了我想要的作用,其实蛮简略的
,只需即将显现的数或运算一下就搞定了,哈
!数码管硬件显现原理我就不介绍了,下面将我写得
代码及实践视频作用共享一下,请我们指导!*/
一、视频作用拜见以下地址:
完好代码下载地址:http://www.51hei.com/f/lmsmg.rar
二、详细程序:
#include
#define uint unsigned int//整型宏界说
#define uchar unsigned char//字符型宏界说
uchar BUF[2];//两个缓存数组
sbit ge=P2^0;//数码管位选端个位操控IO口
sbit shi=P2^1;//数码管位选端十位操控IO口
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e
};//数码管0–9数组代码
uchar code table1[]={
0xfe,0x9c,0x88,0x80
};//数码管拉幕方法代码,总共分4次
/**********************************/
/************延时子函数************/
/**********************************/
void delay(uchar z)
{
uchar x,y;//两个局部变量
for(x=50;x>0;x–)//外循环
for(y=z;y>0;y–);//内循环
}
/**********************************/
/************显现子函数************/
/**********************************/
void xian()
{
uchar i,y;//循环变量
uchar num;//计数变量
for(y=0;y<4;y++)//循环4次构成上下拉幕
{
for(i=0;i<100;i++)//每次显现完后逗留的时刻
{
BUF[0]=table[num/10];//得到个位数,然后存在缓存数据BUF[0]
P0=BUF[0]|table1[y];/***将缓存数与table1[y]中的数或,然后构成拉幕的要害****/
ge=0;//开个位显现
delay(2);
ge=1;
BUF[1]=table[num%10];//得到十位数,然后存在缓存数据BUF[1]
P0=BUF[1]|table1[y];/***将缓存数与table1[y]中的数或,然后构成拉幕的要害****/
shi=0;//开十位显现
delay(2);
shi=1;
}
}
for(i=0;i<250;i++)//拉幕完成后,将刚拉幕完的数逗留一段时刻
{
P0=BUF[0];//送数码管个位数
ge=0;
delay(2);
ge=1;
P0=BUF[1];//送数码管十位数
shi=0;
delay(2);
shi=1;
}
num++;//将计数器数加1
if(num>60)//假如计数变量大于60就清0,重新开始计数
num=0;
}
/**********************************/
/*****************主函数***********/
/**********************************/
void main()
{
while(1)
{
xian();//调用显现子函数
}
}