📄 led_keyboard.lst
字号:
C51 COMPILER V7.20 LED_KEYBOARD 07/11/2007 17:25:14 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE LED_KEYBOARD
OBJECT MODULE PLACED IN .\led_keyboard.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\..\桌面\07experiment\NO6\keil\led_keyboard.c BROWSE DEBUG OBJECTEXTEND P
-RINT(.\led_keyboard.lst) OBJECT(.\led_keyboard.obj)
line level source
1 #include <reg51.h>
2
3 /******led 接口描述******/
4 //P0--->(a-g,dot) 显示
5 //选择使能控制段
6 //P2^3--->使能左第一个数码管 P2^2--->左第二个数码管
7 //P2^1--->左第三个数码管 P2^0--->左第四个数码管
8
9
10 /*********显示数据表 对应0-9 ,a-f*************/
11 unsigned char code table[16]={0x3f,6,0x5b,0x4f,
12 0x66,0x6d,0x7d,7,0x7f,0x6f,0x77,
13 0x7c,0x58,0x5e,0x79,0x71};
14 /**********显示选择表***********************/
15 unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};
16
17 /*****定义一个数组变量用于存放将要显示的值*******/
18
19 unsigned char d[4]={1,2,3,4}; //随意放入一些初始值
20
21 /*****定义一个全局变量 number******/
22 unsigned char number; //number 表示第几个显示 0-3
23
24 /******按键接口描述********/
25 //左第一 二 三 四 个按键分别对应于 P2.7 P2.6 P2.5 P2.4
26 //左第一个按键键值为1
27 //左第二个按键键值为2
28 //左第三个按键键值为3
29 //左第四个按键键值为4
30
31
32 /******延时程序********/
33 void delay (dy)
34 {
35 1 while(--dy);
36 1 }
37
38 /******读取按键子程序 getkey()*************/
39 unsigned char getkey (void)
40 { unsigned char k,tem,keytem;
41 1 keytem=0;
42 1 tem=P2 & 0xf0; //第一次读取按键值
43 1 if(tem!=0xf0) //判断有无按键按下
44 1 {
45 2 for(k=0;k<40;k++)
46 2 delay(250); //延时一段时间
47 2 tem=P2 & 0xf0; //再次读取按键值
48 2 if(tem!=0xf0)
49 2 { if(tem==0x70) keytem=1; //表示左第一个按键按下
50 3 else if(tem==0xb0) keytem=2; //表示左第二个按键按下
51 3 else if(tem==0xd0) keytem=3; //表示左第三个按键按下
52 3 else if(tem==0xe0) keytem=4; //表示左第四个按键按下
53 3 }
54 2 }
C51 COMPILER V7.20 LED_KEYBOARD 07/11/2007 17:25:14 PAGE 2
55 1
56 1 while(tem!=0xf0) tem=P2 & 0xf0; //等待按键释放
57 1 return(keytem); //返回按键值
58 1 }
59
60
61 /********定时器0中断服务程序***************/
62 void timer0(void) interrupt 1
63 {
64 1 TR0=0; //停止定时器0
65 1 TH0=(65536-1000)/256; //通过定时器定时延时大约1ms左右
66 1 TL0=(65536-1000)%256;
67 1 number=(number+1)%4;
68 1 P2=digit[number]; //选择第number个数码管显示
69 1 P0=table[d[number]]; //查表显示要显示的值
70 1 TR0=1; //启动定时器0
71 1 }
72
73 /******定时器初始化函数**********/
74 void Init_Timer (void)
75 {
76 1 TMOD=0x01; //
77 1 TH0=(65536-1000)/256; //通过定时器定时延时大约1ms左右
78 1 TL0=(65536-1000)%256;
79 1 EA=1;
80 1 ET0=1;
81 1 TR0=1;
82 1 }
83
84
85 /********主函数************/
86 //效果就是用定时器服务程序的实现数码管动态..
87 //..显示且按键后对应的数码管数据加1
88 /*************************/
89 void main (void)
90 {
91 1 unsigned char keyboard; //存放按键值
92 1 Init_Timer(); //定时器初始化
93 1 while(1)
94 1 {
95 2 keyboard=getkey();
96 2 if (keyboard==1)
97 2 {
98 3 d[0]=(d[0]+1)%10;
99 3 }
100 2 else if(keyboard==2)
101 2 {
102 3 d[1]=(d[1]+1)%10;
103 3 }
104 2 else if(keyboard==3)
105 2 {
106 3 d[2]=(d[2]+1)%10;
107 3 }
108 2 else if(keyboard==4)
109 2 {
110 3 d[3]=(d[3]+1)%10;
111 3 }
112 2 }
113 1
114 1 }
C51 COMPILER V7.20 LED_KEYBOARD 07/11/2007 17:25:14 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 225 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -