📄 display.lst
字号:
C51 COMPILER V7.06 DISPLAY 05/14/2006 19:44:03 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN display.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE display.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //****************************************************
2 //实现功能:把键盘输入的键盘码,用led显示出来
3 //目标板:
4 //****************************************************
5
6 #include <reg51.h>
7
8 #define p_key P1
9 #define led_date P0
10 #define choose_p P2
11 unsigned char change(unsigned char i);
12 unsigned int display_num=0;
13 //******************时间延迟函数**********************
14 //描 述:用指令实现延时一段时间
15 //入口参数:int i,为时间延迟参数
16 //出口参数:无
17 //设计人:ycj
18 //最后修改:时间(2006.4.26) 修改人(ycj)
19 //****************************************************
20 void delay_time(int i)
21 {
22 1 while(i)
23 1 i--;
24 1 }
25
26 //******************按键扫描函数**********************
27 //描 述:对4*4键盘进行扫描,程序只适合4*4键盘使用,
28 // 键盘占用一组完整的i/o口,在使用这个程序前
29 // 要宏定义p_key为用户实际连接键盘的i/o口
30 // #define p_key Pn;//(n=0、1、2、3)
31 //入口参数:无
32 //返回参数:若有检测到按键就返回按键的编号,否则返回0xff
33 //设计人:ycj
34 //最后修改:时间(2006.4.26)修改人(ycj)
35 //****************************************************
36 unsigned char read_key(void)
37 {
38 1 unsigned char j,key,key_buf=0;
39 1 p_key=0xff;
40 1 //检测是否有建按下//
41 1 p_key=0xf0;
42 1 key=p_key;
43 1 if(key==0xf0)
44 1 {
45 2 return(0xff);//没按键按下,返回0xff
46 2 }
47 1 //有按下,延时去抖//
48 1 delay_time(5000);
49 1 //确认是否有建按下//
50 1 p_key=0xf0;
51 1 key=p_key;
52 1 if(key==0xf0)
53 1 {
54 2 return(0xff);//没按键按下,返回0xff
55 2 }
C51 COMPILER V7.06 DISPLAY 05/14/2006 19:44:03 PAGE 2
56 1 //真的有按键按下,扫描是哪一行有按键按下//
57 1 for(j=0;j<4;j++)
58 1 {key=p_key&(0x10<<j);
59 2 if (key)
60 2 {
61 3 key=p_key;
62 3 }
63 2 else
64 2 {
65 3 key_buf=j*4;
66 3 p_key=~(0x10<<j);//第j行的按键按下了,第j行输出0,其他的i/o口输出1
67 3 //扫描是第j行的哪个按键按下//
68 3 for(j=0;j<4;j++)
69 3 {
70 4 key=p_key&(1<<j);
71 4 if (key)
72 4 {
73 5 key=p_key;
74 5 }
75 4 else
76 4 {
77 5 key_buf+=j;
78 5 return(key_buf);//扫描到按键的确定位置,返回按键的编号
79 5 }
80 4 }
81 3 }
82 2 }
83 1 //没扫描到按键,//
84 1 return(0xff);
85 1 }
86 //***************七段数码管显示函数*******************
87 //描 述:对四位的扫描型七段数码管进行扫描显示,在使用
88 // 前要定义一个全局变量display_num
89 // unsigned int display_num;
90 //入口参数:unsigned int num,要显示的数字(0-9999)
91 //返回参数:无
92 //设计人:ycj
93 //最后修改:时间(2006.4.26)修改人(ycj)
94 //****************************************************
95 void display(unsigned int num)
96 {
97 1 if(num<10000)
98 1 {
99 2 display_num=num;
100 2 }
101 1 choose_p|=3;//先关显示
102 1 led_date=change(display_num/1000);//得到千位的数字,并转换成七段码型
103 1 choose_p&=0xfe;//选通千位
104 1 delay_time(50);//延时一段时间
105 1 choose_p|=1;//关显示
106 1 display_num=display_num%1000;
107 1 led_date=change(display_num/100);//得到百位的数字,并转换成七段码型
108 1 choose_p&=0xfd;//选通百位
109 1 delay_time(50);//延时一段时间
110 1 choose_p|=2;//关显示
111 1 display_num=display_num%100;
112 1 led_date=change(display_num/10);//得到十位的数字,并转换成七段码型
113 1 choose_p&=0xfb;//选通十位
114 1 delay_time(50);//延时一段时间
115 1 choose_p|=4;//关显示
116 1 led_date=change(display_num%10);//得到个位的数字,并转换成七段码型
117 1 choose_p&=0xf7;//选通十位
C51 COMPILER V7.06 DISPLAY 05/14/2006 19:44:03 PAGE 3
118 1 delay_time(50);//延时一段时间
119 1 choose_p|=8;//关显示
120 1 }
121 //****************数字-码型转换函数*******************
122 //描 述:把数字转换成七段码型,此程序仅配合共阳的七
123 // 段数码管使用
124 //入口参数:unsigned char i,要转换的数字(0-9),
125 //返回参数:转换后的七段码型,0xff表示转换失败
126 //设计人:ycj
127 //最后修改:时间(2006.4.26)修改人(ycj)
128 //****************************************************
129
130 unsigned char change(unsigned char i)
131 {
132 1 switch(i)
133 1 {
134 2 case 0:
135 2 return(0xc0);//0的七段码型
136 2 case 1:
137 2 return(0xf9);//1的七段码型
138 2 case 2:
139 2 return(0xa4);//2的七段码型
140 2 case 3:
141 2 return(0xb0);//3的七段码型
142 2 case 4:
143 2 return(0x99);//4的七段码型
144 2 case 5:
145 2 return(0x92);//5的七段码型
146 2 case 6:
147 2 return(0x82);//6的七段码型
148 2 case 7:
149 2 return(0xf8);//7的七段码型
150 2 case 8:
151 2 return(0x80);//8的七段码型
152 2 case 9:
153 2 return(0x90);//9的七段码型
154 2 default:
155 2 return(0xff);//转换失败
156 2 }
157 1 }
158 //*********************主函数*************************
159 //描 述:把键盘输入的键盘码,用led显示出来
160 //入口参数:无
161 //返回参数:无
162 //设计人:ycj
163 //最后修改:时间(2006.4.26)修改人(ycj)
164 //****************************************************
165 int main(void)
166 {unsigned char i;
167 1 while(1)
168 1 {
169 2 i=read_key();//扫描键盘
170 2 if(i<16)
171 2 display((unsigned int)i);//有效的键盘值
172 2 else
173 2 display(0xffff);//数据无效
174 2 }
175 1
176 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.06 DISPLAY 05/14/2006 19:44:03 PAGE 4
CODE SIZE = 366 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 1
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 + -