再问一次,一个关于51单片机的程序,用C语言。关于声光控制程序的

是关于一个数码管和一个含有四个开关的拨码开关的问题。拨码开关的1、2、3、4键位依次接入51单片机的po^0到p0^3。而数码管的a、b、c、d、e、f、g、ap接线口依次接入51单片机的p3^0到p3^7接口。还有就是要求当拨码开关拨到1的时候,数码管显示1,当拨码开关拨到2的时候,数码管显示2,当拨码开关拨到3的时候,数码管显示3,当拨码开关拨到4的时候,数码管显示F!可能要求有点多了,呵呵,麻烦各位啦

#include<reg51.h>
#define SMG P3 //数码管
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
sbit key4=P0^3;
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
//0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
void main()
{
P0=0xff;//IO口做输入先写1
P3=0;//防止出现乱码
while(1)
{
if(!key1)SMG=table[1];
if(!key2)SMG=table[2];
if(!key3)SMG=table[3];
if(!key4)SMG=table[14];
}
}
还要加按键去抖程序,你自己写吧!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-12
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa;
sbit K1=P0^0;
sbit K2=P0^1;
sbit K3=P0^2;
sbit K4=P0^3;
uchar code table[]={0x06,0x5b,0x4f,0x71};
void init()
{
P3=0;
K1=1;
K2=1;
K3=1;
K4=1;
}
void main()
{
init();
while(1)
{
if(K1==0)
P3=table[1];
if(K2==0)
P3=table[2];
if(K3==0)
P3=table[3];
if(K4==0)
P3=table[4];
}
}
第2个回答  2011-11-12
#include <avr/io.h>

uint8_t seg_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

#define seg_dis PORTD
#define seg_ctrl PORTC
#define key_input PINA

void MCU_init(void)
{
DDRA=0X00;
DDRB=0XFF;
DDRC=0XFF;
DDRD=0XFF;
seg_dis=seg_code[0];
seg_ctrl=0xfe;

}

int main(void)
{
MCU_init();
uint8_t key;
while(1)
{
key=~(key_input&0xff);
switch(key)
{
case 0x01:
seg_dis=seg_code[1];
break;
case 0x02:
seg_dis=seg_code[2];
break;
case 0x04:
seg_dis=seg_code[3];
break;
case 0x08:
seg_dis=seg_code[15];
break;
default:
seg_dis=0xff;
break;

}
}
}
相似回答