keil 51单片机 怎么把a1=0,a2=1,a3=1,a4=0合并成a=0110.

a1a2a3……都是sbita1=P1^1的写到这里想把a1到a8合并成一个数a,然后下面写成switch(a),请问要怎么定义a?恳求说详细点,因为我很新手的。swit... a1 a2 a3……都是sbit a1=P1^1的

写到这里想把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;
}
展开
 我来答
做而论道
高能答主

2014-01-22 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部

如下即可:


#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 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
风雪画戟
2014-01-24 · 超过14用户采纳过TA的回答
知道答主
回答量:62
采纳率:100%
帮助的人:17.8万
展开全部
你是想吧。p1口的数据给a是吗? 宏定义一下就是啦!

要是你需要a1 a2 ~a8这些位 乱排序,但还是能用一个变量a来控制的话数组也不错的用法。

比如
定义unsigned char code table[]={ a1 ,a2,a3,a4,a5,a6,a7,a8 } 这样放在一起。
当a1~a7 随便怎么变顺序 只要写 table=随便哪个a_ 就可以有序的整合在一起
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
探索一切
2014-01-22 · TA获得超过135个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:100万
展开全部
首先请问a1~a8都在P1口上么,如果这样且a1对应低位,a8对应高位那么
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在任意引脚上即可。
不知修改了算法的答案你是否满意.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
到处走走看看bd
2014-01-23 · TA获得超过141个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:89万
展开全部
不要a1--a8这样定义,只定义一个a1,然后a=a1,再将a=a左移1,循环8次,就组成一个8位数了,然后再switch就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7247a56
2014-01-22 · TA获得超过4615个赞
知道大有可为答主
回答量:1422
采纳率:92%
帮助的人:470万
展开全部

可以定义一个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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(12)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式