//在数码管上显示字符6,按下外部按键中断0(S5)则8左移动,按下外部按键中断1(S4)则8右移动。
#include<reg52.h>
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char key,keyvalue,y,adress;
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
// 0 1 2 3 4 5 6 7 8
void delay(unsigned char n)
{
unsigned char j;
while(n--)
{
for(j=0;j<123;j++);
}
}
void init0()
{
IT0=1;
EX0=1;
IT1=1;
EX1=1;
EA=1;
}
void keyscan(void)//按键扫描
{
key=0x0f;
if(key!=0x0f)
{
delay(10);
if(key!=0x0f)
{
key=0x0f;
switch(key)//line
{
case(0x07):keyvalue=0;break;
case(0x0b):keyvalue=1;break;
case(0x0d):keyvalue=2;break;
case(0x0e):keyvalue=3;break;
}
key=0xf0;
switch(key)//
{
case(0x70):keyvalue=keyvalue;break;
case(0xb0):keyvalue=keyvalue+4;break;
case(0xd0):keyvalue=keyvalue+8;break;
case(0xe0):keyvalue=keyvalue+12;break;
}
while((y<30)&&(key!=0xf0))
{
delay(10);y++;
}
}
}
}
void weizhi(void)//数码管位选
{
switch(adress)
{
case(0):LSC=0;LSB=0;LSA=0;break;
case(1):LSC=0;LSB=0;LSA=1;break;
case(2):LSC=0;LSB=1;LSA=0;break;
case(3):LSC=0;LSB=1;LSA=1;break;
case(4):LSC=1;LSB=0;LSA=0;break;
case(5):LSC=1;LSB=0;LSA=1;break;
case(6):LSC=1;LSB=1;LSA=0;break;
case(7):LSC=1;LSB=1;LSA=1;break;
}
}
void int0() interrupt 0 //s5左移
{
EX0=0;
if(keyvalue==4)
{
delay(1);
if(keyvalue==4)
{
adress++;
}
}
EX0=1;
}
void int1() interrupt 2 //s4右移
{
EX1=0;
if(keyvalue==3)
{
delay(1);
if(keyvalue==3)
{
adress--;
}
}
EX1=1;
}
void main()
{
init0();
adress=0;
while(1)
{
keyscan();
weizhi();
P0=smgduan[6];
}
}共1条
1/1 1 跳转至页
求助!按键不能实现数码管卫位移
只看楼主 1楼
共1条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
| OK1126B-S开发板下多时段语音提示型电子时钟被打赏¥27元 | |
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
| OK1126B-S开发板的脚本编程及应用设计被打赏¥27元 | |
| 5v升压8.4v两节锂电池充电芯片,针对同步和异步的IC测试被打赏¥35元 | |
| 【S32K3XX】S32DS LPI2C 配置失败问题解决被打赏¥22元 | |
| 【S32K3XX】FLASH 的 DID 保护机制被打赏¥19元 | |
我要赚赏金
