51单片机一位数码管c程序

51单片机一位数码管c程序,第1张

main();错了

把函数体用{}括起来

还有你P0和P1应该是单片机的口吧?不要用unsigned定义,直接用就行了,用之前先置1。

看看这个能不能用:

#include<reg51h>

void Delay(unsigned char n)

{unsigned char i;

do { for(i=0;i<23;i++) ; }

while(n--);

}

unsigned char a;

unsigned char code SM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

main()

{

a=0;

P0=0xff;

P1=0xff;

while(1) //你原来的while(1);是死循环,程序到这就死了,不往下执行

{

{P1=0xfe;

P0=SM[a];

Delay(20);

a++;

if(a>9){a==0;}}

}

}

最后,下次不要发错地方了。

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

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]; //个位显示处理

}

可能原因:1你的延时时间可能太短,超过人眼视觉暂留时间,你可以改你的delayms(3)或者直接把delay 函数里的110改小一些(当然改了110就不是1ms一次了,不过本身就不是精确计时无所谓)

2你的数码管开关顺序不对,不知道你用的是共阴还是共阳,不过一般是写完数据后再开数码管控制位,如果你的程序里1是开,0是关的话,那么这个程序相当于是两个数码管在P1=table之后会有一个同时工作的时间,之后才关断其中一个,这时数码管的显示会受到影响。推荐编写顺序是shu12=0;

shu11=1;

P1=table[shi1];

delayms(5);

shu11=0;

shu12=1;

P1=table[ge1];

delayms(5);这样保证一个时间内只有一个数码管工作,新写入的数据不会对另一个数码管造成影响。下面的程序同样采用这种顺序。

3虽然可能性不大,不过也有可能是硬件电路的连接接触不良导致的信号跳变,这个万用表测下就能知道了

以上就是关于51单片机一位数码管c程序全部的内容,包括:51单片机一位数码管c程序、电路如下图请问单片机动态数码管显示C语言程序怎么写呢、怎么用C语言程序使双位数码管显示出稳定的数字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9487765.html

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

发表评论

登录后才能评论

评论列表(0条)

保存