您的位置 首页 ADAS

STC89C52单片机驱动数码管动态显示

实现功能:驱动开发板上的数码管,滚动显示1、2、3、4、5

//////////////////////////////////////////////////////////////////////////

完结功用: 驱动开发板上的数码管,翻滚显现1、2、3、4、5、6,完结数码管的
动态显现
试验板类型:BS-XYD-C52
试验称号: 动态数码管的显现
编写人: 谢应东
编写日期: 2012-4-26
//////////////////////////////////////////////////////////////////////////
#include
#include

#define uchar unsigned char //界说unsigned char 为 uchar
#define uint unsigned int//界说unsigned int 为 uint

sbit Duan=P2^6;//界说数码管的段选使能端
sbit Wei =P2^7; //界说数码管的位选使能端

#define Digital_tube_Wei_Enable Wei=1;//敞开操控数码管的位选使能端
#define Digital_tube_Wei_Disable Wei=0; //封闭操控数码管的位选使能端

#define Digital_tube_Duan_Enable Duan=1;//敞开操控数码管的段选使能端
#define Digital_tube_Duan_Disable Duan=0;//封闭操控数码管的段选使能端

#define Digital_tube_Duan P0 //界说数码管数据端口

uchar code Dis_table[]= //将BCD码转换成数码管扫描码的数组
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
uchar code Dis_Position[]=//界说数码管位选的数组
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
//////////////////////////////////////////////////////////////////////////
函数称号:毫秒延时函数
函数功用:完结毫秒级的延时
参数介绍:Delay_MS: 界说需求延时的毫秒的数值
iNumber: 记载Delay_MS的数值,以for句子完结所要求的延时
iValue: 要延时毫秒所要进行的循环数值,本数值为实践测得
返回值:
注意事项:本试验是在所用晶振为12M的前提下完结的毫秒延时,本函数是经过循环的形
式完结,所以假如改动了晶振的频率,请做相应的改动
//////////////////////////////////////////////////////////////////////////
void DelayMs(uint Delay_MS)
{
uint iNumber,iValue;
for(iNumber=0;iNumber //用for句子完结单片机的延时
{
iValue=107; //107这个数值是经过测定而得
while(iValue–);
}
}
//////////////////////////////////////////////////////////////////////////
函数称号:One_DigitalTube_display
函数功用:完结在试验板上数码管指定显现,即在特定的数码管上显现特定的数字,比
在第一个数码管上显现0
参数介绍:uData:要显现的数字的BCD码数组
uNumber:挑选哪个数码管显现,即让某个特定数码管显现
返回值:
注意事项:试验板上的数码管是共阴极的数码管,假如运用共阳极的数码管,请注意不
要弄反了
//////////////////////////////////////////////////////////////////////////
void One_DigitalTube_display(uchar uData,uchar uNumber)
{
Digital_tube_Duan_Enable; //使能数码管的段选
Digital_tube_Duan=Dis_table[uData];//输入所要显现的数值
Digital_tube_Duan_Disable; //封闭数码管的段选

Digital_tube_Wei_Enable; //使能数码管的位选
Digital_tube_Duan=Dis_Position[uNumber]; //点亮特定的数码管
Digital_tube_Wei_Disable; //封闭数码管的位选
DelayMs(1); //调整时序,以完结安稳显现
}
//////////////////////////////////////////////////////////////////////////
函数称号:All_DigitalTube_display
函数功用:让6个数码管显现特定的内容
参数介绍:uData:显现内容数组地址
uNumber:完结六个数码管的顺次显现变量
返回值:
注意事项:无
//////////////////////////////////////////////////////////////////////////
void All_DigitalTube_display(uchar *uData)
{
uchar uNumber;
for(uNumber=0;uNumber<6;uNumber++)//循环6次,6个数码管各亮一次
{
One_DigitalTube_display(uData[uNumber],uNumber);
}
}
//////////////////////////////////////////////////////////////////////////
函数称号:Cycle_DigitalTube_display
函数功用:6个数码管从左到右顺次翻滚显现指定的内容(循环一次)
参数介绍:uData:显现内容数组地址
uNumber1:完结数码管翻滚的变量
uNumber2:完结数码管扫描的变量
返回值:
注意事项:无
//////////////////////////////////////////////////////////////////////////

void Cycle_DigitalTube_display(uchar *uData)
{
uchar uNumber1,uNumber2;
for(uNumber1=0;uNumber1<240;uNumber1++) //翻滚6次,每次内容显现40个循环
{
for(uNumber2=0;uNumber2<6;uNumber2++) //扫描6个数码管
{
One_DigitalTube_display(uData[(uNumber1/40+uNumber2)%6],uNumber2);
DelayMs(3);

}
}
}
//////////////////////////////////////////////////////////////////////////
函数称号:main
函数功用:完结6个数码管循环翻滚显现指定的内容
参数介绍:无
返回值:
注意事项:无
//////////////////////////////////////////////////////////////////////////
void main()
{
uchar uData[6]={1,2,3,4,5,6};//六个数码管翻滚显现1,2,3,4,5,6
while(1)
{
Cycle_DigitalTube_display(uData); //调用循环显现函数
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/262843.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部