单片机c语言,用四个个开关控制led显示0~f,这个怎么写啊?

如题所述

假设P0的低4位接4 个开关,P1接一个数码管,程序大体如下:
include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,.......};
void delay1ms(uint i) //1ms延时程序
{uint j;
for(;i>0;i--){
for(j=0;j<164;j++)
{;} }
}
void main(void )//主程序
{

while(1)
{
num=table(0x0f&P0);
P1=num;
delay1ms(2);
}
}追问

原理图是

追答

P0换成P2就行了
数码管是共阳的,将共阴的代码取反就行了 P1=~num;

追问

那个延时程序是一定要的吗?

这个是我自己写的,才学不懂这个,不知道为什么不行

而且我输入了您给我发的构造了也有错啊?

麻烦帮我看下谢谢了

追答

编译通过了吗?延时程序可以不要,象你的程序也可以,不过最好将主程序里的语句加在 while(1)死循环里,编译通过的话,可能软件仿真没操作好,我一直是试验板试验,没用过这个软件

追问

您的编译就是没有通过,我的那个编译没有错,可是仿真的时候led灯不亮,就是不知道是哪里错了

追答

#include
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
//共阴数码管七段码
uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x84};
void delay1ms(uint i) //1ms延时程序
{uint j;
for(;i>0;i--){
for(j=0;j<164;j++)
{;} }
}
void main(void )//主程序
{
while(1)

{
num=table[0x0f&P2];
P1=num;
delay1ms(2);
}
}

温馨提示:答案为网友推荐,仅供参考
相似回答