C语言写LED数码管显示程序与汇编是一致的,将显示的基本内容定义在一个数组中就可以了,比如:
#include<reg51h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit rstkey=P2^2;
sbit speaker=P2^0;
void delay()//延时约400毫秒
{
uchar i,j;
for(i=0;i<200;i++)
for(j=0;j<250;j++);
}
main()
{
uchar i,key;
P2=0xff;
while(1)
{
i=0;
P1=table[i];
while(1)
{
key=P3;
if(key!=0)break;
}
switch(key)
{
case 0x01:i=1;break;
case 0x02:i=2;break;
case 0x04:i=3;break;
case 0x08:i=4;break;
case 0x10:i=5;break;
case 0x20:i=6;break;
case 0x40:i=7;break;
case 0x80:i=8;break;
default:break;
}
P1=table[i];//显示按下抢答器的号
P0=key;//显示按下键号的LED
while(1)
{
if(rstkey==0)break;//主持人按下复位键则重新开始
speaker=~speaker;//否则蜂鸣器报警
delay();
}
}
}
要用8×8的LED点阵显示数字0~9,先用proteus 画出仿真图,然后用取模软件画出数字8×8点阵图形,并按行取模,每个数字共8个字节数据,显示时取出字模并逐行扫描就行了。
把8个LED灯接到单片机的一个口,再给其赋值就可以表示了,比如接到51系列单片机的P1口。P1=1时第1个灯亮,等于2时第2个灯亮,等于127时八个灯全部亮
直接给P1口赋值就可以了,不过要用十六进制表示比较好。具体编程的话看看单片机相关的书就知道了。
这里给出一种基于Arduino平台的单片机数字0到9显示的程序代码,可供参考:
c++
Copy code
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; //定义LED引脚
int numPins[][7] = { //定义数字0~9的LED点阵图形
{1, 1, 1, 1, 1, 1, 0}, //0
{0, 1, 1, 0, 0, 0, 0}, //1
{1, 1, 0, 1, 1, 0, 1}, //2
{1, 1, 1, 1, 0, 0, 1}, //3
{0, 1, 1, 0, 0, 1, 1}, //4
{1, 0, 1, 1, 0, 1, 1}, //5
{1, 0, 1, 1, 1, 1, 1}, //6
{1, 1, 1, 0, 0, 0, 0}, //7
{1, 1, 1, 1, 1, 1, 1}, //8
{1, 1, 1, 1, 0, 1, 1} //9
};
void setup() {
for (int i = 0; i < 10; i++) { //初始化LED引脚为输出模式
pinMode(ledPins[i], OUTPUT);
}
}
void loop() {
for (int num = 9; num >= 0; num--) { //从数字9到0循环
for (int i = 0; i < 7; i++) { //依次点亮数字的7个LED
digitalWrite(ledPins[i], numPins[num][i]); //控制LED引脚输出高低电平
}
delay(1000); //延时1秒
}
}
该程序利用数组存储数字09的LED点阵图形,并通过循环依次点亮每个数字的7个LED,从而实现数字09的循环显示。可以根据需要对延时时间进行调整,以达到合适的显示效果。
电路图 如下:
#include<reg52h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar code digit[6]={0xf9,0xa4,0xb0,0x99,0x92,0X82};
void delay(xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)
{
wei=1;
P0=0x01;
wei=0;
duan=1;
P0=digit[0];
duan=0;
delay(500);
wei=1;
P0=0x02;
wei=0;
duan=1;
P0=digit[1];
duan=0;
delay(500);
wei=1;
P0=0x04;
wei=0;
duan=1;
P0=digit[2];
duan=0;
delay(500);
wei=1;
P0=0x08;
wei=0;
duan=1;
P0=digit[3];
duan=0;
delay(500);
wei=1;
P0=0x10;
wei=0;
duan=1;
P0=digit[4];
duan=0;
delay(500);
wei=1;
P0=0x20;
wei=0;
duan=1;
P0=digit[5];
duan=0;
delay(500);
}
}
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
//sbit dula=P2^6;
sbit wela1=P2^0;//位选
sbit wela2=P2^1;
sbit wela3=P2^2;
sbit wela4=P2^3;
void delay(uint);
uint a,b;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//字符0123456789
void main()
{
while(1)
{
P0=0xea;
wela1=0;
wela2=1;
wela3=1;
wela4=1;//显示千位数
delay(1000);
P0=0xea;//数字
wela1=1;
wela2=0;
wela3=1;
wela4=1;//显示百位数
delay(1000);
P0=0xea;//数字
wela1=1;
wela2=1;
wela3=0;
wela4=1;//显示十位数
delay(1000);
P0=0xea;//数字
wela1=1;
wela2=1;
wela3=1;
wela4=0;//显示个位数
delay(1000);
}
}
void delay(uint x)
{
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
以上就是关于用C语言怎么编写7段LED的显示程序全部的内容,包括:用C语言怎么编写7段LED的显示程序、怎么利用8×8led点阵屏循环显示数字0-9编写程序并用Proteus仿真验证、8个LED做8位二进制数显示的程序怎样编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)