//--------------------------------------------------------------------
// 版本: V1.0
// 作者: wei
// 时间: 2015.8.27
// 程序说明: 采用4位共阳数码管.
// 数码管的1-4位分别由P1.4-P1.7控制.当P1.4-P1.7的某位设置为
// 低电平时,则相应的位选通点亮.
// 数码管的7段分别由P2.0-P2.7控制,当P1.4-P1.7相应的位选通时,
// 设置P2.0-P2.7的某位为低,则数码管相应的段位点亮.
// 本实验是将数码管的4位全部点亮,并显示数字0-7循环.
// 注意事项: 数码管的短路帽必须插上
//--------------------------------------------------------------------
#include<reg52.h>
#define uchar unsigned char
#define shu P2 //0-9
#define wei P1 // 4-7
uchar data disdat[]={0,1,2,3,4,5,6,7};
uchar code distrl[]={0xef,0xdf,0xbf,0x7f,0xef,0xdf,0xbf,0x7f}; //1110,1101,1011,0111,
uchar code ledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // 0-9
unsigned int i=250;
uchar data WCnt;
void main(void)
{
WCnt=0;
while(1)
{
shu=0xff; //熄灭,以防拖尾;
wei=distrl[WCnt];
shu=ledcode[disdat[WCnt]];
WCnt++;
WCnt=WCnt%8; //将数值控制在0-7之间;
while(i--); //延时的参数类型,直接影响到延时的长短;
}
}
/*
#include<reg52.h>
unsigned char wei[] = {0xff,0xef,0xdf,0xbf,0x7f,0x0f}; //数码管位控制码
unsigned char duan[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //数码管的数字表,分别为数字0-9
//--------------------------------------------------------------------
//延时函数,延时时间由cnt决定
//--------------------------------------------------------------------
void delay(unsigned long cnt)
{
while(cnt--);
}
void main(void)
{
unsigned char i;
i = 0;
while(1)
{
P2 = 0xff; //去鬼影
P1 = wei[5]; //控制数码管的位,4位全部点亮
P2 = duan[i++]; //控制数码管的段
if(i > 9) i = 0; //显示数字0-9,超过9时,显示数字0
delay(8000);
}
}
*/
动态数码管显示
最新推荐文章于 2015-09-09 17:07:58 发布