运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序

运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序,第1张

动态显示的是有固定格式的,赋值,开显示,延时,关显示,假设p0口接数据显示位,p2口低4位接片选,

p2=tab[1]

//赋值

p3_0=0

//开第一位显示

for(i=0i<200:i++)//延时

p3_0=1

//关第一位显示

p2=tab[2]

p3_1=0

//开第二位显示

for(i=0i<200:i++)

p3_1=1

这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的

#include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

code unsigned char tab[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}

//共阴数码管 0-9

unsigned char Dis_Shiwei//定义十位

unsigned char Dis_Gewei//定义个位

/******************************************************************/

/*延时函数*/

/******************************************************************/

void delay(unsigned int cnt)

{

while(--cnt)

}

/******************************************************************/

/*主函数 */

/******************************************************************/

main()

{

TMOD |=0x01//定时器设置 10ms in 12M crystal,工作在模式1,16位定时

TH0=0xd8

TL0=0xf0

IE= 0x82 //打开中断

TR0=1//打开定时开关

while(1)

{

P0=Dis_Shiwei//显示十位

P2=0

delay(300) //短暂延时

P0=Dis_Gewei//显示个位

P2=1

delay(300)

}

}

/******************************************************************/

/*定时器中断函数 */

/******************************************************************/

void tim(void) interrupt 1 using 1

{

static unsigned char second,count

TH0=0xd8//重新赋值

TL0=0xf0

count++

if (count==100) //100x10ms=1S,大致延时时间

{

count=0

second++//秒加1

if(second==100)

second=0

Dis_Shiwei=tab[second/10]//十位显示值处理

Dis_Gewei=tab[second%10]//个位显示处理

}

不知道你 是那种c环境,大概思路如下,

selcet,output 改为你的具体环境下的函数。

int i=1

char [4]={0xf9,0xa4,0xb0,ox66}//输出1.2,3,4 相应

的字符值,共阳 极

while()

{

for( i=0i<4i++) // 动态显示就是不停的循环逐个显

{

selcet(i)//选择第i 个 灯来显示,

output(char[i])//输出1 还是2,3,4 字符

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7818140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存