📄 chengxu.c
字号:
#include <intrins.h>
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1= P1^0;
sbit LED2= P1^1;
sbit LED3= P1^2;
sbit LED4= P1^3;
void Delay(uint n) //软件延时
{
unsigned int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<100;j++);
}
}
void dingshiqijishi(void)//定时器秒计时
{TMOD|=0x01; //定时器0,方式1
TL0=0x0D8; //TL0定时器0低8位计数器
TH0=0x0F0; //TH0定时器0高8位计数器
TR0=1; //定时器/计数器0启动位.TR0=1:开始计时或计数 TR0=1禁止计时或计数
ET0=1; //定时器/计数器0中断使能
EA=1; //全局中断使能
}
void kongzhiLED1(void) //LED1控制函数
{ P0=0x01;
LED1=0;
dingshiqijishi() ;
LED1=1;
}
void kongzhiLED2(void) //LED2控制函数
{ P0=0x02;
LED2=0;
dingshiqijishi();
LED2=1;
}
void kongzhiLED3 (void) //LED3控制函数
{ P0=0x03;
LED3=0;
dingshiqijishi();
LED3=1;
}
void kongzhiLED4 (void) //LED4控制函数
{ P0=0x04;
LED4=0;
}
uchar key(void)//4x4键盘子程序-判断有键闭合后调用该子程序返回键值
//0x11,0x21,0x41,0x81
//0x12,0x22,0x42,0x82
//0x14,0x24,0x44,0x84
//0x18,0x28,0x48,0x88
{
uchar hang,lie;
P2=0xf0;
if((P2&0xf0)!=0xff)//有键闭合,顺序执行,否则为干扰,返回“0”
{
hang=0xfe;//行扫初值
while((hang&0x10)!=0)
{
P2=hang;
if((P2&0xf0)!=0xf0)//判断健值
{
lie=((P2&0xf0)|0x0f);
return((~hang)+(~lie));
}
else
hang=(hang<<1)|0x01;
}
}
return(0);
}
void push(void)//判断是否有键按下
{
uint m,kpush;;
P2=0xf0;
while(1)
{
if ((kpush=P2&0x0f)!=0xff)
{
Delay(100) ;//延时
m=key();//调用键值判断
switch(m) {
case 0x11: kongzhiLED1();//按键1按下LED1亮
case 0x21: kongzhiLED2();//按键2按下LED2亮
case 0x41: kongzhiLED3();//按键3按下LED3响
case 0x81: kongzhiLED4();//按键4按下LED4响
default:break ;
}
}
}
}
void main()
{
while(1)
{ P0=0x00;
LED4=1;
push(); //扫描键盘
}
}
void intersvr0(void) interrupt 0 using 1 //定时器0中断服务程序
{
static uint cishu=0; //中断次数
cishu++;
if( (cishu%20)==0 ) //每100ms中断一次,20次就是2000ms即为2s "%"为求余
{ LED1=LED2=LED3=LED4=1;
cishu=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -