📄 复件 ijnew.c
字号:
#include <AT892051.H>
#define RELOAD_HIGH 0x3C //0xD8//0x3C高位值
#define RELOAD_LOW 0xAF //0xEF//0xB0低位值
#define ON 1 //开逻辑
#define OFF 0 //关逻辑
#define DB_VAL 3 //定义按键弹跳时间
code char com1[5]="11111";
code char com2[5]="22222";
code char com3[5]="33333";
char switch_debounce=DB_VAL; //按键跳动计时
char i=0;
char dir=0;
char old_dir=0;
char second=5;
sbit sw1=P1^0; //P12
sbit sw2=P1^1; //P13
sbit sw3=P1^2; //P14
sbit led1=P1^3; //P15
sbit led2=P1^4; //P16
sbit led3=P1^5; //P17
sbit led=P3^7; //P11
void turnoffled(void)
{
led1=OFF;
led2=OFF;
led3=OFF;
}
void main(void)
{
TMOD=0x21; //设置定时器1模式2、定时器0模式1
TH1=0xF4; //12MHz 4800波特率
TL1=0xF4;
TR1=1;
SM0=0;
SM1=1;
REN=0;
PCON=0x80;
TH0=RELOAD_HIGH;
TL0=RELOAD_LOW;
ET0=1;
EA=1;
TR0=1;
turnoffled();
while(1)
{
switch (dir)
{
case 1:
{
for(i=0;i<5;i++)
{
SBUF=com1[i];
while(!TI);
TI=0;
}
led2=OFF;
led3=OFF;
led1=ON;
dir=0;
break;
}
case 2:
{
for(i=0;i<5;i++)
{
SBUF=com2[i];
while(!TI);
TI=0;
}
led1=OFF;
led3=OFF;
led2=ON;
dir=0;
break;
}
case 3:
{
for(i=0;i<5;i++)
{
SBUF=com3[i];
while(!TI);
TI=0;
}
led1=OFF;
led2=OFF;
led3=ON;
dir=0;
break;
}
}
}
}
void system_tick0(void) interrupt 1 using 2
{
TR0=0; //停计时
TH0=RELOAD_HIGH; //设定重装值
TL0=RELOAD_LOW;
TR0=1; //开始计时
if (switch_debounce)
{ //按键抖动
switch_debounce--; //按键抖动计时减一
}
else
{
if(!sw1)
{
switch_debounce=DB_VAL;
dir=1;
}
if(!sw2)
{
switch_debounce=DB_VAL;
dir=2;
}
if(!sw3)
{
switch_debounce=DB_VAL;
dir=3;
}
}
second--;
if(!second)
{
second=5;
led=~led;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -