单片机学习小组
直播中

李鑫

7年用户 1319经验值
私信 关注

怎样去编写基于单片机和数码管的按键代码程序呢

怎样去编写基于单片机和数码管的按键代码程序呢?

回帖(1)

张涛

2022-2-16 14:32:47
#include
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0xc0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0Xbf,0XFF};//ROM
uchar yi,er,san,si,wu,liu,qi,ba;
bit S7=0,S6=0;S5=0;S4=0;
uchar num=0;
void delayms(int ms);
void display1(uchar yi,uchar er);
void display2(uchar san,uchar si);
void display3(uchar wu,uchar liu);
void display4(uchar qi,uchar ba);
void allinit(void);
void keyscan();
//void keyscan16();
void main()
{
allinit();
//yi=0;er=8;san=10;si=5;wu=0;liu=10;qi=5;ba=5;
while(1)
{
keyscan();
//keyscan16();
display1(yi,er);
display2(san,si);
display3(wu,liu);
display4(qi,ba);
}
}
void keyscan()
{
if(P30= =0)
{
delayms(5);
if(P30= =0)
{
S7=1;
}
while(!P30);
}
else if(P31= =0)
{
delayms(5);
if(P31= =0)
{
S6=1;
}
while(!P31);
}
else if(P32= =0)
{
delayms(5);
if(P32= =0)
{
S5=1;
}
while(!P32);
}
else if(P33= =0)
{
delayms(5);
if(P33= =0)
{
S4=1;
}
while(!P33);
}
}
/*
void keyscan16()
{
uchar temp;

P44=0;P42=1;P3=0X7F;
temp=P3;
temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
if(temp!=0x0f)
{
        delayms(5);
        temp=P3;
        temp=temp&0X0F;
        if(temp!=0x0f)
        {
                temp=P3;
                switch(temp)
                {
                        case 0x7e: num=0;break;//1111 1110 P37----p30
                        case 0x7d: num=1;break;//1111 1101
                        case 0x7b: num=2;break;
                        case 0x77: num=3;break;       
                }
                while(temp!=0x0f)
                {
                        temp=P3;
                        temp=temp&0X0F;
                }
        }
}


P44=1;P42=0;P3=0XBF;//1011 111
temp=P3;
temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
if(temp!=0x0f)
{
        delayms(5);
        temp=P3;
        temp=temp&0X0F;
        if(temp!=0x0f)
        {
                temp=P3;
                switch(temp)
                {
                        case 0xBe: num=4;break;//1111 1110 P37----p30
                        case 0xBd: num=5;break;//1111 1101
                        case 0xBb: num=6;break;
                        case 0xB7: num=7;break;       
                }
                while(temp!=0x0f)
                {
                        temp=P3;
                        temp=temp&0X0F;
                }
        }
}


P3=0XDF;P44=1;P42=1;//1101 1111
temp=P3;
temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
if(temp!=0x0f)
{
        delayms(5);
        temp=P3;
        temp=temp&0X0F;
        if(temp!=0x0f)
        {
                temp=P3;
                switch(temp)
                {
                        case 0xDe: num=8;break;//1111 1110 P37----p30
                        case 0xDd: num=8;break;//1111 1101
                        case 0xDb: num=10;break;
                        case 0xD7: num=11;break;       
                }
                while(temp!=0x0f)
                {
                        temp=P3;
                        temp=temp&0X0F;
                }
        }
}


P3=0XEF;P44=1;P42=1;//1101 1111
temp=P3;
temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
if(temp!=0x0f)
{
        delayms(5);
        temp=P3;
        temp=temp&0X0F;
        if(temp!=0x0f)
        {
                temp=P3;
                switch(temp)
                {
                        case 0xEe: num=12;break;//1111 1110 P37----p30
                        case 0xEd: num=13;break;//1111 1101
                        case 0xEb: num=14;break;
                        case 0xE7: num=15;break;       
                }
                while(temp!=0x0f)
                {
                        temp=P3;
                        temp=temp&0X0F;
                }
        }
}
}
*/
void allinit(void)
{
P2=0XA0;//打开控制蜂鸣器继电器573
P0=0X00;//关闭蜂鸣器继电器

P2=0XC0;//打开数码管位选
P0=0XFF;//选择所有数码管
P2=0XFF;//打开数码管段选
P0=0XFF;//关闭所有数码管


P2=0X80;//打开控制LED573
P0=0XFF;//关闭所有LED灯


}


void display1(uchar yi,uchar er)
{undefined
P2=0XC0;//打开数码管位选573 U8
P0=0X01;//选择第一个数码管
P2=0XFF;//打开数码管段选573 U7
P0=tab[yi];//数码管显示码值
delayms(1);


        P2=0XC0;//打开数码管位选573  U8
        P0=0X02;//选择第二个数码管
        P2=0XFF;//打开数码管段选573  U7
        P0=tab[er];//数码管显示码值
        delayms(1);


}


void display2(uchar san,uchar si)
{undefined
P2=0XC0;//打开数码管位选573 U8
P0=0X04;//选择第三个数码管 //0000 0100
P2=0XFF;//打开数码管段选573 U7
P0=tab[san];//数码管显示码值
delayms(1);


        P2=0XC0;//打开数码管位选573  U8
        P0=0X08;//选择第四个数码管
        P2=0XFF;//打开数码管段选573  U7
        P0=tab[si];//数码管显示码值
        delayms(1);


}


void display3(uchar wu,uchar liu)
{undefined
P2=0XC0;//打开数码管位选573 U8
P0=0X10;//选择第五个数码管0001 000
P2=0XFF;//打开数码管段选573 U7
P0=tab[wu];//数码管显示码值
delayms(1);


        P2=0XC0;//打开数码管位选573  U8
        P0=0X20;//选择第六个数码管
        P2=0XFF;//打开数码管段选573  U7
        P0=tab[liu];//数码管显示码值
        delayms(1);


}


void display4(uchar qi,uchar ba)
{undefined
P2=0XC0;//打开数码管位选573 U8
P0=0X40;//选择第七个数码管
P2=0XFF;//打开数码管段选573 U7
P0=tab[qi];//数码管显示码值
delayms(1);


        P2=0XC0;//打开数码管位选573  U8
        P0=0X80;//选择第八个数码管
        P2=0XFF;//打开数码管段选573  U7
        P0=tab[ba];//数码管显示码值
        delayms(1);


}


void delayms(int ms)
{undefined
int i,j;
for(i=ms;i>0;i–)
for(j=845;j>0;j–);
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分