📄 formula.lst
字号:
C51 COMPILER V8.02 FORMULA 01/04/2007 09:53:28 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE FORMULA
OBJECT MODULE PLACED IN formula.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE formula.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************
2 * *
3 * ME500单片机开发系统演示程序 - 乘法口诀模拟答题器 *
4 * *
5 * LCD1602显示 *
6 * *
7 * 版本: V1.0 (2006/11/20) *
8 * 作者: gguoqing (Email: gguoqing@willar.com) *
9 * 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) *
10 * 时间: 2007/01/03 *
11 * *
12 *【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
13 *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
14 * *
15 ********************************************************************
16 * *
17 * 描述: *
18 * F--- 模拟出题控制开关; C--- 输入正确答案; *
19 * (0-9)--- 有效数字输入; *
20 * 答题正确,蜂鸣器响4声。 *
21 * *
22 *******************************************************************/
23 #include < reg51.h >
24 #include < intrins.h >
25
26 #define uchar unsigned char
27 #define uint unsigned int
28
29 bit F_in=0,truer;
30
31
32 sbit LCD_RS = P2^0;
33 sbit LCD_RW = P2^1;
34 sbit LCD_EN = P2^2;
35
36 uchar code cdis1[ ] = {" MULTIPLICATION "};
37 uchar code cdis2[ ] = {"TABLE: 0*0=00 "};
38
39 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
40
41 sbit BEEP = P3^7; //蜂鸣器驱动线
42 uchar key_buf; //显示缓存
43 uchar temp;
44 uchar key,key_num=0; //键顺序吗
45
46 uchar data testdata[] = {0x00,0x00,0x00,0x00};
47 uchar data in_data[] = {0x01,0x02};
48
49 uchar shift ;
50
51 /**********************************************************
52
53 延时子程序
54
55 **********************************************************/
C51 COMPILER V8.02 FORMULA 01/04/2007 09:53:28 PAGE 2
56 void delay(uint ms)
57
58 {
59 1 uchar t;
60 1 while(ms--)
61 1 {
62 2 for(t = 0; t < 120; t++);
63 2 }
64 1 }
65
66 /*************************************************************/
67 /* */
68 /* 延时 x*0.14ms */
69 /* */
70 /*************************************************************/
71 void delay0(uchar x)
72 {
73 1 unsigned char i;
74 1 while(x--)
75 1 {
76 2 for (i = 0; i<13; i++) {}
77 2 }
78 1 }
79
80 /*************************************************************/
81 /* */
82 /* 蜂鸣器响一声 */
83 /* */
84 /*************************************************************/
85 void beep()
86 {
87 1 unsigned char i;
88 1 for (i=0;i<180;i++)
89 1 {
90 2 delay0(6);
91 2 BEEP=!BEEP; //BEEP取反
92 2 }
93 1 BEEP=1; //关闭蜂鸣器
94 1 delay(250); //延时
95 1 }
96
97 /*************************************************************/
98 /* */
99 /*检查LCD忙状态 */
100 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据 */
101 /* */
102 /*************************************************************/
103 bit lcd_busy()
104 {
105 1 bit result;
106 1 LCD_RS = 0;
107 1 LCD_RW = 1;
108 1 LCD_EN = 1;
109 1 delayNOP();
110 1 result = (bit)(P0&0x80);
111 1 LCD_EN = 0;
112 1 return(result);
113 1 }
114
115 /*******************************************************************/
116 /* */
117 /*写指令数据到LCD */
C51 COMPILER V8.02 FORMULA 01/04/2007 09:53:28 PAGE 3
118 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
119 /* */
120 /*******************************************************************/
121 void lcd_wcmd(uchar cmd)
122
123 {
124 1 while(lcd_busy());
125 1 LCD_RS = 0;
126 1 LCD_RW = 0;
127 1 LCD_EN = 0;
128 1 _nop_();
129 1 _nop_();
130 1 P0 = cmd;
131 1 delayNOP();
132 1 LCD_EN = 1;
133 1 delayNOP();
134 1 LCD_EN = 0;
135 1 }
136
137 /*******************************************************************/
138 /* */
139 /*写显示数据到LCD */
140 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
141 /* */
142 /*******************************************************************/
143 void lcd_wdat(uchar dat)
144 {
145 1 while(lcd_busy());
146 1 LCD_RS = 1;
147 1 LCD_RW = 0;
148 1 LCD_EN = 0;
149 1 P0 = dat;
150 1 delayNOP();
151 1 LCD_EN = 1;
152 1 delayNOP();
153 1 LCD_EN = 0;
154 1 }
155
156 /*************************************************************/
157 /* */
158 /* LCD初始化设定 */
159 /* */
160 /*************************************************************/
161 void lcd_init()
162 {
163 1 delay(15);
164 1 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
165 1 delay(5);
166 1 lcd_wcmd(0x38);
167 1 delay(5);
168 1 lcd_wcmd(0x38);
169 1 delay(5);
170 1
171 1 lcd_wcmd(0x0c); //显示开,关光标
172 1 delay(5);
173 1 lcd_wcmd(0x06); //移动光标
174 1 delay(5);
175 1 lcd_wcmd(0x01); //清除LCD的显示内容
176 1 delay(5);
177 1 }
178
179 /*************************************************************/
C51 COMPILER V8.02 FORMULA 01/04/2007 09:53:28 PAGE 4
180 /* */
181 /* 设定显示位置 */
182 /* */
183 /*************************************************************/
184
185 void lcd_pos(uchar pos)
186 {
187 1 lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
188 1 }
189
190 /*************************************************************
191
192 键扫描子程序
193
194 *************************************************************/
195 void keyscan(void)
196 {
197 1 P1=0x0F; //低四位输入
198 1 delay(1);
199 1 temp=P1; //读P1口
200 1 temp=temp&0x0F;
201 1 temp=~(temp|0xF0);
202 1 if(temp==1)
203 1 key=0;
204 1 else if(temp==2)
205 1 key=1;
206 1 else if(temp==4)
207 1 key=2;
208 1 else if(temp==8)
209 1 key=3;
210 1 else
211 1 key=16;
212 1
213 1 P1=0xF0; //高四位输入
214 1 delay(1);
215 1 temp=P1; //读P1口
216 1 temp=temp&0xF0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -