#include<reg52.h>
sbit LED1=P1^1;
void main()
{
LED1=0;
//下面的代码:八位共阴数码管的第一位显示一个0
LatchWei=1;
L0=0;
L1=1;
L2=1;
L3=1;
L4=1;
L5=1;
L6=1;
L7=1;
LatchWei=0;
LatchDuan=1;
L0=1;
L1=1;
L2=1;
L3=1;
L4=1;
L5=1;
L6=0;
L7=0;
LatchDuan=0;
while(1)
{
}
}
按照以上的类似的代码,我想做到在 任意一位 显示任意一个数 ,能够实现吗?要怎么写?如果不能的话,又要怎么实现我的想法?
要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。
以显示数字“0”为例,c语言程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(){//主函数
P0 = table[0];//显示0,大家可以修改里面的数据。
while(1);//程序不再执行其他步骤;
}
扩展资料:
数字0-9的对应段码:
数字0 0x3f
数字1 0x06
数字2 0x5b
数字3 0x4f
数字4 0x66
数字5 0x6d
数字6 0x7d
数字7 0x07
数字8 0x7f
数字9 0x6f
共阴极数码管也就是说,当控制信号为1时该段LED点亮,8段数码管的数字0~9定义为:
3FH,06H,5BH,4FH,66H ;01234
6DH,7DH,07H,7FH,6fh ;56789
以下为简易8路抢答器的例程:
#include<reg51.h>
#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();
}
}
}
不涉及动态显示,未用锁存器
#include <reg51.h>
#define _x10 (0xfe)
#define _x1 (0xfd)
unsigned char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main()
{
void show(unsigned char duan,unsigned char wei);
while(1)
{
show(0,_x1);
}
}
void show(unsigned char duan,unsigned char wei)
{
P2=wei;
if(duan<10)
{
P0=Tab[duan];
}
else
{
;
}
}
追问我是新手 没看太明白,能解释一下么,而且我下到单片机内数码管也没显示啥
追答不给我实际的硬件连接,接口定义,怎么可能会有反应呢,这个代码只是个演示,只对应上面的那副图的连接
追问是少了
sbit L0=P0^0;
sbit L1=P0^1;
sbit L2=P0^2;
sbit L3=P0^3;
sbit L4=P0^4;
sbit L5=P0^5;
sbit L6=P0^6;
sbit L7=P0^7;
sbit LatchWei=P2^1;
sbit LatchDuan=P2^0;
有必要这么麻烦么、、、、、、、、、、、、、、、、、、、