keil 51单片机 怎么把a1=0,a2=1,a3=1,a4=0合并成a=0110.
写到这里想把a1到a8合并成一个数a,然后下面写成switch(a),请问要怎么定义a?恳求说详细点,因为我很新手的。
switch(a1a2a3a4a5a6a7a8)
{
case(00001110): n=0;break;
case(00001101): n=4;break;
case(00001011): n=8;break;
case(00000111): n=12;break;
} 展开
如下即可:
#include <reg51.h>
sbit a0 = P2^2;
sbit a1 = P2^6;
sbit a2 = P1^5;
sbit a3 = P3^4;
char bdata bb;
sbit b0 = bb^0;
sbit b1 = bb^1;
sbit b2 = bb^2;
sbit b3 = bb^3;
void main()
{
while(1) {
bb = 0;
b0 = a0;
b1 = a1;
b2 = a2;
b3 = a3;
switch(bb) {
case 0x01: P0 = 0xC0; break; //显示0
case 0x02: P0 = 0xF9; break; //1
case 0x04: P0 = 0xA4; break; //2
case 0x08: P0 = 0xB0; break; //3
case 0x03: P0 = 0x99; break; //4
case 0x06: P0 = 0x92; break; //5
case 0x0C: P0 = 0x82; break; //6
case 0x09: P0 = 0xF8; break; //7
default: P0 = 0x8E; //F
}
}
}
仿真运行如下:
2023-06-12 广告
要是你需要a1 a2 ~a8这些位 乱排序,但还是能用一个变量a来控制的话数组也不错的用法。
比如
定义unsigned char code table[]={ a1 ,a2,a3,a4,a5,a6,a7,a8 } 这样放在一起。
当a1~a7 随便怎么变顺序 只要写 table=随便哪个a_ 就可以有序的整合在一起
unsigned char a=0;
a=P1;即可无需switch语句这么繁琐。
如果相反a8对应低位a1对应高位那么就有
unsigned char a=0;
a=(a1<<7)|(a2<<6)|(a3<<5)|(a4<<4)|(a5<<3)|(a6<<2)|(a7<<1)|a8;
依据上法举一反三,我们可以定义a1~a8在任意引脚上即可。
不知修改了算法的答案你是否满意.
可以定义一个unsigned char a,然后规定好a1 a2 a3 a4 a5 a6 a7 a8分别对应变量a的7~0位,
然后判断、赋值:
unsigned char a;
a=0;
if(a1==1) a=a | 0x80;//
if(a2==1) a=a | 0x40;//
if(a3==1) a=a | 0x20;//
if(a4==1) a=a | 0x10;//
if(a5==1) a=a | 0x08;//
if(a6==1) a=a | 0x04;//
if(a7==1) a=a | 0x02;//
if(a1==8) a=a | 0x01;//
switch(a)
{
case(0b00001110): n=0;break;
case(0b00001101): n=4;break;
case(0b00001011): n=8;break;
case(0b00000111): n=12;break;
}