标题:
单片机实验 数码管静态显示实验
[打印本页]
作者:
xuelongxl
时间:
2016-11-5 20:58
标题:
单片机实验 数码管静态显示实验
内容:循环显示十六进制数0~F
#include "reg52.h"
sbit EnWei =P2^7; //位码锁存器使能端
sbit EnSeg =P2^6; //段码锁存器使能端
#define DATAPORT (P0) //段/位码输出端口
#define WEICODE (0x7f) //位码初始值
#define OFFCODE (0xff) //定义熄灭码
#define INCSPEED (10) //显示内容变化速度
unsigned char code SegTab[]={ //定义段码表(共阴极)
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
unsigned char DispBuf[8]={ //定义显示缓冲区
0x00,0xff,0xff,0xff,
0xff,0xff,0xff,0xff
};
//延时函数
//x为延时时间,范围1~65535
void xDelay(unsigned int x)
{
unsigned char y;
for(;x>0;x--)
for(y=110;y>0;y--);
}
//数值分离函数,将要显示的数各数值位分离到DispBuf数组中
//x为要显示的数,范围0~4294967295
void GetDispBufValue(unsigned long x)
{
unsigned char Temp,i;
i=0; //作为DispBuf数组的下标
while(x>0)
{
Temp=x%10; //使x对10求余,取出最低位
x/=10; //更改x的值,为下一轮作准备
DispBuf[i++]=Temp; //将取出的数值位存入显示缓冲
}
while(i<8) //如果x不足8位,将其余的位填上熄灭码
{
DispBuf[i++]=OFFCODE;
}
}
//显示函数
//x要显示的值,范围0~4294967295
void Display(unsigned long x)
{
unsigned char WeiCode=WEICODE,i;
GetDispBufValue(x); //先将显示值的数值位分离出来
for(i=0;i<8;i++) //循环刷新每一位数码管
{
if(DispBuf[i]!=OFFCODE)
{
DATAPORT=SegTab[DispBuf[i]]; //输出段码并锁存
EnSeg=1;
EnSeg=0;
DATAPORT=WeiCode; //输出位码并锁存
EnWei=1;
EnWei=0;
}
WeiCode>>=1; //为下一位数值准备位码
WeiCode|=0x80;
xDelay(5); //延时一会,使刚被点亮的位稳定
}
DATAPORT=0x00; //熄灭最后一位被点亮的数码管
EnSeg=1;
EnSeg=0;
}
void main(void)
{
unsigned char IncSpeed=INCSPEED;
unsigned long x=76543210;
P2=0x00;
while(1){
Display(x); //调用显示函数
//if(--IncSpeed==0) //减到0时,为显示数值加1
//{
// IncSpeed=INCSPEED; //恢复初值,为下一轮作准备
//x++; //显示数值加1
//}
}
}
复制代码
05实验五 静态显示.zip
2016-11-5 20:58 上传
点击文件名下载附件
下载积分: 黑币 -5
16.67 KB, 下载次数: 9, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1