用51单片机在六位共阴极数码管显示41407,用c语言,谢谢!
哥们儿,要编写程序的话很简单的,因为这是个数字静态的显示,但编程必须得有该单片机的外围电路图才行的,例如外围中至少有两个锁存器,用于所存片选信号和段码信号。六个数码管的共阴极分别接在一个八位的P口上,按对应的顺序给该P口一个8位的十六进制代码,使得相应的数码管为低电平,其余的为高电平。记住只能使一个数码管有效,单片机一次只能点亮一个数码管。我给你提供个思路吧,由于没有电路图我无法编程。首先点亮显示4的那个数码管,思路:首先写出数字4对应的十六进制数,把该数送入段码锁存器,此时还没有进行位选,故该值被送入了6个数码管。但我们只点亮4对应的那个数码管,所以需要进行片选,通过P口输出地十六进制代码到片选锁存器,使得4所对应的数码管被选中。这样4就被点亮了。然后延迟一段时间。再重复上述的操作,把相应的数字对应的数码管点亮。由于是循环点亮的,利用数码管的余晖我们可以看到该六位数码管均被点亮。但实际在同一时刻只有一个是点亮的。
学习单片机一定会要勤于思考,程序可以很灵活。有不懂得地方欢迎咨询,我还有类似这道题的视频教程,不过文件比较大,你需要的话可以私下联系。如果你看了这些视频相信这个编程你一定没问题了。
算了还是我亲自给你写吧!说实话我真的很忙。那个视频好几百兆不太方便传给你。
我写的这段程序我在单片机实验板上运行过了,完全没问题。我用的是C52的单片机,C52跟C51差别不大,只是ROM的大小不同,定时器计数器的数目不同等等,跟这段程序没关系,也就是说这段程序在C51的板子上完全可以运行。需要说明的是我说过,编程需要单片机的外围结构,我的板子片选端(wela)接的是P2.7,段选端(dula)接的是P2.6,你的板子要是不同的话把程序上相应的部分改一下。还有我的数码管共有8个,从左到右,最右边的为最高位,我是从最左边开始点亮的,跟你的板子不同的你可以相应的改一下。
#include<reg52.h>
#define uchar unsigned char;
sbit dula=P2^6;
sbit wela=P2^7;
void delay();
void main()
{
while(1)
{
dula=1;
P0=0x66;
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
delay();
dula=1;
P0=0x06;
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
delay();
dula=1;
P0=0x66;
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
delay();
dula=1;
P0=0x3f;
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
delay();
dula=1;
P0=0x07;
dula=0;
P0=0xff;
wela=1;
P0=0xef;
delay();
}
}
void delay()
{
unsigned int i;
for(i=500;i>0;i--);
}
有不明白的地方欢迎再咨询。
温馨提示:内容为网友见解,仅供参考
第1个回答 2013-11-17
哈哈。其实很简单的,
这个可以联系我,
我给你写一下。
Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答