📄 led.lst
字号:
C51 COMPILER V7.06 LED 04/23/2009 18:50:43 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN LED.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LED.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************************************************
2 程 序 名:实验1-按键,数码管,led综合应用【改进版】
3 开发环境:Keil
4 编 写 者:杜镇标
5 功能简述:设计一个单片机电路,2个按键,1位数码管,4个LED,1个按键按下,
6 数码管自增1(up),另一个按键按下,数码管自减1(down),4个LED
7 显示数字值。
8 硬件说明:LS8接在P1.7上,P0.1是8个LED的公共极,本实验要拉低P0.1,
9 由于按键和数码以及LED显示都公用P1,程序要分时扫描进行,晶体为12MHz
10 完成日期:2009.4.23
11 ******************************************************************************/
12
13 #include <reg51.h>
14 //定义位操作
15 sbit ls0=P0^1; //LED公共极
16 sbit ls1=P0^2; //个位公共极
17 sbit key=P0^6; //键盘公共线,见原理图
18 char mun; //读取的键值
19 #define Dat P1 //数据输出端
20 unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管数字显示表
21 // 对应显示 0 1 2 3 4 5 6 7 8 9
22 unsigned char table[]={0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6}; // 四个led二进制显示
23 // 对应显示 0 1 2 3 4 5 6 7 8 9
24
25 //延时----------------------------
26 Delay(unsigned int t)
27 {
28 1 while(t--);
29 1 }
30 //显示----------------------------
31 void Display(char mun)
32 {
33 1 unsigned char k,j;
34 1 for(k=0;k<50;k++)
35 1 {
36 2 Dat=table[mun];
37 2 ls0=0; //拉低公共线
38 2 Delay(10);
39 2 ls0=1;
40 2 }
41 1 for(j=0;j<50;j++)
42 1 {
43 2 Dat=tab[mun];
44 2 ls1=0;
45 2 Delay(10);
46 2 ls1=1;
47 2 }
48 1 Dat=0xff; //!!!!因为公用P1,所以个子程序用完P1后要恢复为0xff
49 1 }
50 //--键盘扫描程序--------------------------------------
51 Scankey()
52 {
53 1 unsigned char i;
54 1 key=0; //拉低键盘公共线
55 1 if(Dat!=0xff) //有按键按下
C51 COMPILER V7.06 LED 04/23/2009 18:50:43 PAGE 2
56 1 {
57 2 Delay(1000); //消抖动
58 2 if(Dat!=0xff) //的确有键按下
59 2 {
60 3 i=~Dat; //读取键盘状态,因为键盘按下位=0,抬起=1,所以这里取反便于下面分析
61 3 switch(i)
62 3 {
63 4 case 0x01:mun=mun++;break; //K1
64 4 case 0x02:mun=mun--;break; //K2
65 4 default: mun=mun;break; //其它双键按下不处理,均=0
66 4 }
67 3 switch(mun)
68 3 {
69 4 case -1:mun=9;break; //过小时
70 4 case 10:mun=0;break; //过大时
71 4 default: mun=mun;break; //其它双键按下不处理,均=0
72 4 }
73 3 while(Dat!=0xff)
74 3 {key=1; //暂时关闭键盘,不干扰显示
75 4 Display(mun); //等待按键抬起
76 4 key=0; //开启键盘检测
77 4 }
78 3 }
79 2 }
80 1 key=1; //释放键盘公共线
81 1 }
82
83 //--主程序---------------------------------------------------------
84 main()
85 {
86 1 mun=0; //开机显示"0"
87 1 while(1)
88 1 {
89 2 Display(mun); //显示
90 2 Scankey(); //键盘扫描
91 2 }
92 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 161 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 ----
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 + -