📄 main.c
字号:
//*****************************
//键盘提示音
//*****************************
#include<reg52.h>
//包含自己使用的键盘驱动的头文件, 以调用获取按键值的函数
#include"key_4x3.h"
//如果还没学会多文件编程,可以将自己的键盘扫描程序,
//放到本文件里,直接调用里面的函数,并去掉#include"key_4x3.h"
#define uchar unsigned char
#define uint unsigned int
//IO口和位定义
#define LIGHT P1
sbit bell = P0^1;
sbit led = P0^2;
uchar keynum; //按键序号
bit flag = 0; //键盘扫描标志[尽量用字节数少的数据类型]
//****************************
//短促的提示声
//****************************
void bi(void)
{
bell = 1; //响
led = 0; //灯亮
}
//****************************
//初始化,使蜂鸣器和灯不工作
//****************************
void Initi(void)
{
bell = 0; // 不响 [0或1由自己使用的电路决定]
led = 1; // 灯灭
}
////////////////////////////////////////////
void main(void)
{
TMOD = 0x01; //定时器0,16位工作方式
TH0 = (65536 - 10000) / 256; //给定时器高8位装入初值
TL0 = (65536 - 10000) % 256; //给定时器低8位装入初值
ET0 = 1; //打开定时器0中断
EA = 1; //打开总中断 [两者都打开才行]
TR0 = 1; //启动定时器
Initi(); //简单初始化一下
while(1)
{
if(flag)
{
keynum = KEY_num(0); //键盘扫描后返回按键序号 1~12,换成自己的键盘扫描函数,
flag = 0;
}
switch(keynum)
{
case 1:bi(); LIGHT = 0xfe; break; // 按键1
case 2:bi(); LIGHT = 0xfe<<1; break; // 按键2
case 3:bi(); LIGHT = 0xfe<<2; break; // 按键3
case 4:bi(); LIGHT = 0xfe<<3; break;
case 5:bi(); LIGHT = 0xfe<<4; break;
case 6:bi(); LIGHT = 0xfe<<5; break;
case 7:bi(); LIGHT = 0xfe<<6; break;
case 8:bi(); LIGHT = 0xfe<<7; break; // 按键8
case 9:
case 10:
case 11:
case 12:bi(); break;
default: Initi(); break; //没有按键按下,不响
}
}
}
//中断服务
void KeyScan(void) interrupt 1 using 0
{
TR0 = 0; //可以先关掉定时器
flag = 1; //扫描键盘允许标志
// keynum = KEY_num(0); //建议在中断函数里不要放太多代码
TH0 = (65536 - 10000) / 256; //重新赋初值 10毫秒
TL0 = (65536 - 10000) % 256;
TR0 = 1; //重新打开定时器
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -