📄 electric.c
字号:
#include <reg52.h>
#include <absacc.h>
#define N8155CMD XBYTE[0x1000]
#define PA XBYTE[0x1001]
#define PB XBYTE[0x1002]
sbit speaker=P1^4;
void delay_MS(unsigned int count)//延时函数 延时=1ms*count
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
int keyscan(void)//键盘扫描函数,使用行列反转扫描法
{
unsigned char cord_h,cord_l;//行列值
N8155CMD=0x03;
PA=0x00;
PB=0x0f;
cord_l=PB;
N8155CMD=0x01;
if(cord_l!=0x0f) //先检测有无按键按下
{
delay_MS(5); //去抖动干扰
cord_l=PB; //读入列线值
if(cord_l!=0x0f)
{
cord_l|=0x00;
PA|=0xf0;
N8155CMD=0x00;
cord_h=PA&0xf0; //读入行线值
return(cord_l+cord_h);//键盘最后组合码值并返回
}
}
else return(0xff); //否则返回固定值0xff
}
void main()
{
TMOD=0x01; //定时器/计数器方式1
EA=1; //允许中断
ET0=1; //定时器/计数器0
TH0=0; //设定初值
TL0=0;
TR0=1; //开始定时
while(1);
}
void Timer0_int() interrupt 1 //定时器0中断方式
{
switch(keyscan()) //判断按键
{
case 0x7e: TH0=64021/256; TL0=64021%256; break;
case 0x7d: TH0=64103/256; TL0=64103%256; break;
case 0x7b: TH0=64260/256; TL0=64260%256; break;
case 0x77: TH0=64400/256; TL0=64400%256; break;
case 0xbe: TH0=64522/256; TL0=64522%256; break;
case 0xbd: TH0=64620/256; TL0=64620%256; break;
case 0xbb: TH0=64684/256; TL0=64684%256; break;
case 0xb7: TH0=64777/256; TL0=64777%256; break;
case 0xde: TH0=64840/256; TL0=64840%256; break;
case 0xdd: TH0=64898/256; TL0=64898%256; break;
case 0xdb: TH0=64968/256; TL0=64968%256; break;
case 0xd7: TH0=65030/256; TL0=65030%256; break;
case 0xee: TH0=65078/256; TL0=65078%256; break;
case 0xed: TH0=65110/256; TL0=65110%256; break;
case 0xeb: TH0=65157/256; TL0=65157%256; break;
case 0xe7: TH0=65178/256; TL0=65178%256; break;
default: ET0=0; speaker=0;
}
speaker=!speaker;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -