求以下代码具体意思

发布网友 发布时间:2022-04-22 00:36

我来回答

1个回答

热心网友 时间:2023-09-21 17:46

程序代码不全,交通灯测试程序?:针对代码详细解释如下:

place控制数码管位选,低电平有效。至于是最高位,还是最低位,要看实际接的电路

#include
#define value P2    //控制数码管显示的段码端口
#define place P0    //控制数码管位选
unsigned char d[4];
//共阴数码管段码
usigned char Num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit addrC=P1^0;//
sbit addrB=P1^1;//
sbit addrA=P1^2;//
sbit clear=P1^3;//清空

sbit ledG=P1^4;//控制点亮熄灭LED灯绿灯
sbit ledY=P1^5;//控制点亮熄灭LED灯黄灯
sbit ledR=P1^6;//控制点亮熄灭LED灯红灯

unsigned char count;
unsigned char gears;
unsigned int tN;
unsigned int fCnt;
unsigned long regCnt;
unsigned int pCnt;
//不精确延时函数Delay
void Delay( unsigned int DelayTime)
{
    while(DelayTime--);
}
//数码管显示程序
void display()
{
    if(gears==1)            //gears等于1时
    {
        d[3]=0;             //用于数字最高位显示0
        d[2]=pCnt/100;      //取出pCnt的百位,假如d[2]=1,用于后面显示Num[1],
        d[1]=(pCnt%100)/10; //取出pCnt的十位,假如d[1]=2,用于后面显示Num[2],
        d[0]=pCnt% 10;      //取出pCnt的个位,假如d[0]=3,用于后面显示Num[3],

        place=0xfe;value=Num[d[3]];Delay(300);//place控制最高位数码管显示,显示值为Num[0],去查找Num[0]对应的数码管段码意思是数码管显示0
        place=0xfd;value=Num[d[2]];Delay(300);//place控制最高位后面那位数码管显示,显示值为Num[1]意思是数码管显示1
        place=0xfb;value=Num[d[1]];Delay(300);//place控制十位数码管显示,显示值为Num[2]意思是数码管显示2
        place=0xf7;value=Num[d[0]];Delay(300);//place控制个位数码管显示,显示值为Num[3]意思是数码管显示3
        ledG=1; //绿灯熄灭
        ledY=1; //黄灯熄灭
        ledR=0; //红灯亮(低电平点亮LED)
    }

    else if(gears==2)       //gears等于2时
    {
        d[3]=pCnt/1000;         //取出pCnt的千位
        d[2]=(pCnt%1000 )/100;  //取出pCnt的百位
        d[1]=(pCnt%100)/10;     //取出pCnt的十位
        d[0]=pCnt%10;           //取出pCnt的个位
        //控制数码管显示同gears等于1时,不同是黄灯亮,有显示小数点例如102.3
        place=0xfe;value=Num[d[3]];Delay(300);
        place=0xfd;value=Num[d[2]];Delay(300);
        place=0xfb;value=Num[d[1]]+0x80;Delay(300);//0x80是显示小数点
        place=0xf7;value=Num[d[0]];Delay(300);

        ledG=1;
        ledY=0;
        ledR=1;
    }
    else if(gears==3)
    {
        d[3]=pCnt/1000;
        d[2]=(pCnt%1000)/100;
        d[1]=(pCnt%100)/10;
        d[0]=pCnt% 10;

        place=0xfe;value=Num[d[3]]+0x80;Delay(300);
        place=0xfd;value=Num[d[2]];Delay(300);
        place=0xfb;value=Num[d[1]];Delay(300);
        place=0xf7;value=Num[d[0]];Delay(300);

        ledG=0;
        ledY=1;
        ledR=1;
    }
    else if(gears==4)   //数码管全部显示0
    {
        d[3]=0;
        d[2]=0;
        d[1]=0;
        d[0]=0;

        place=0xfe;value=Num[d[3]];Delay(300);
        place=0xfd;value=Num[d[2]];Delay(300);
        place=0xfb;value=Num[d[1]];Delay(300);
        place=0xf7;value=Num[d[0]];Delay(300);

        ledG=0;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com