📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 11/22/2008 13:59:23 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //*****************************
2 //键盘提示音
3 //*****************************
4 #include<reg52.h>
5
6 //包含自己使用的键盘驱动的头文件, 以调用获取按键值的函数
7 #include"key_4x3.h"
8 //如果还没学会多文件编程,可以将自己的键盘扫描程序,
9 //放到本文件里,直接调用里面的函数,并去掉#include"key_4x3.h"
10
11 #define uchar unsigned char
12 #define uint unsigned int
13
14 //IO口和位定义
15 #define LIGHT P1
16 sbit bell = P0^1;
17 sbit led = P0^2;
18
19 uchar keynum; //按键序号
20 bit flag = 0; //键盘扫描标志[尽量用字节数少的数据类型]
21
22 //****************************
23 //短促的提示声
24 //****************************
25 void bi(void)
26 {
27 1 bell = 1; //响
28 1 led = 0; //灯亮
29 1 }
30 //****************************
31 //初始化,使蜂鸣器和灯不工作
32 //****************************
33 void Initi(void)
34 {
35 1 bell = 0; // 不响 [0或1由自己使用的电路决定]
36 1 led = 1; // 灯灭
37 1 }
38
39 ////////////////////////////////////////////
40 void main(void)
41 {
42 1 TMOD = 0x01; //定时器0,16位工作方式
43 1 TH0 = (65536 - 10000) / 256; //给定时器高8位装入初值
44 1 TL0 = (65536 - 10000) % 256; //给定时器低8位装入初值
45 1 ET0 = 1; //打开定时器0中断
46 1 EA = 1; //打开总中断 [两者都打开才行]
47 1 TR0 = 1; //启动定时器
48 1
49 1 Initi(); //简单初始化一下
50 1 while(1)
51 1 {
52 2 if(flag)
53 2 {
54 3 keynum = KEY_num(0); //键盘扫描后返回按键序号 1~12,换成自己的键盘扫描函数,
55 3 flag = 0;
C51 COMPILER V8.02 MAIN 11/22/2008 13:59:23 PAGE 2
56 3 }
57 2 switch(keynum)
58 2 {
59 3 case 1:bi(); LIGHT = 0xfe; break; // 按键1
60 3 case 2:bi(); LIGHT = 0xfe<<1; break; // 按键2
61 3 case 3:bi(); LIGHT = 0xfe<<2; break; // 按键3
62 3 case 4:bi(); LIGHT = 0xfe<<3; break;
63 3 case 5:bi(); LIGHT = 0xfe<<4; break;
64 3 case 6:bi(); LIGHT = 0xfe<<5; break;
65 3 case 7:bi(); LIGHT = 0xfe<<6; break;
66 3 case 8:bi(); LIGHT = 0xfe<<7; break; // 按键8
67 3 case 9:
68 3 case 10:
69 3 case 11:
70 3 case 12:bi(); break;
71 3 default: Initi(); break; //如果没有,一直响
72 3 }
73 2 }
74 1 }
75 //中断服务
76 void KeyScan(void) interrupt 1 using 0
77 {
78 1 TR0 = 0; //可以先关掉定时器
79 1 flag = 1; //扫描键盘允许标志
80 1 // keynum = KEY_num(0); //建议在中断函数里不要放太多代码
81 1 TH0 = (65536 - 10000) / 256; //重新赋初值 10毫秒
82 1 TL0 = (65536 - 10000) % 256;
83 1 TR0 = 1; //重新打开定时器
84 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 188 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -