📄 1302.lst
字号:
C51 COMPILER V7.06 1302 12/03/2007 08:44:24 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************************************************************
2 Create By: he jia xing
3 Date:2007/12/1
4 *********************************************************************************************
5 Modified By:
6 Date:
7 *********************************************************************************************
8 说明:按K3键进行日期,时间设置
9 按下K2使能或取消闹铃功能,闹铃响时按下K2可以消除铃声
10 按下K1和K2查看闹铃时间
11 按下K1和K4设置闹铃时间
12 **********************************************************************************************
13 Email: hejiaxing13@yahoo.com.cn
14 QQ:752957222
15 **********************************************************************************************/
16
17 #include<reg51.h>
18 #include<intrins.h>
19 sbit LCD_RS = P1^0;
20 sbit LCD_RW = P1^1;
21 sbit LCD_EN = P1^2;
22 sbit RESET = P2^3;
23 sbit CLK = P2^1;
24 sbit DATA = P2^2;
25 #define uchar unsigned char
26 #define uint unsigned int
27 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
28 uchar inter,flag,flag1,inter1,alarm_flag;
29 uchar alarm_time[6]={0x30,0x37,0x33,0x30,0x30,0x30};
30 // 十时 时 十分 分 十秒 秒
31 uchar code str[] = " / / Week: ";
32 uchar code str1[] ="Time: ";
33 uchar code str2[] =" Set Alarmtime: ";
34 uchar code str3[] =" - - ";
35 uchar code str4[] =" Alarmtime Is: ";
36 uchar code str5[] ="Time Is coming !";
37 sbit K1 = P1^3;
38 sbit K2 = P1^4;
39 sbit K3 = P1^5;
40 sbit K4 = P1^6;
41 sbit BEEP = P1^7;
42
43 uchar code init[8] = {0x12,0x10,0x17,0x01,0x12,0x6,0x07};
44 // 秒 分 时 日 月 周 年
45
46 uchar init1[7] = {0x12,0x10,0x02,0x03,0x01,0x09,0x08};//该数组用于存放读取的时间值
47 // 秒 分 时 日 月 周 年
48
49 uchar init2[16] = {0x12,0x10,0x02,0x03,0x01,0x09,0x08,0x07,0x12,0x10,0x02,0x03,0x01,0x09,0x08,0x07};
50 // 十秒 秒 十分 分 十时 时 十日 日 十月 月 无 星期 十年 年
51 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13
52 //用于存放转换后的时间值
53 uchar time[2] = {0x00,0x00};
54 uchar ok,week;
55 uchar code tab[8] = {0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00};//小喇叭
C51 COMPILER V7.06 1302 12/03/2007 08:44:24 PAGE 2
56 //存放设置过程中的值
57
58 unsigned char n=0; //n为节拍常数变量
59 unsigned char code music_code[] ={
60 0x7F, 0x16, 0x72 , 0x16, //格式为: 频率常数, 节拍常数, //两只老虎
61 0x65, 0x16, 0x80 , 0x16,
62 0x7F, 0x16, 0x72 , 0x16,
63 0x65, 0x16, 0x80 , 0x16,
64
65 0x65, 0x16, 0x60 , 0x16,
66 0x55, 0x32, 0x65 , 0x16,
67 0x60, 0x16, 0x55 , 0x32,
68
69 0x55, 0x10, 0x4c , 0x10,
70 0x55, 0x10, 0x60 , 0x10,
71 0x65, 0x16, 0x80 , 0x16,
72
73 0x55, 0x10, 0x4c , 0x10,
74 0x55, 0x10, 0x60 , 0x10,
75 0x65, 0x16, 0x80 , 0x16,
76
77 0x72, 0x16, 0xAB , 0x16,
78 0x80, 0x32, 0x72 , 0x16,
79 0xAB, 0x16, 0x80 , 0x32,
80 0x7F, 0x16, 0x72 , 0x16, //格式为: 频率常数, 节拍常数, //两只老虎
81 0x65, 0x16, 0x80 , 0x16,
82 0x7F, 0x16, 0x72 , 0x16,
83 0x65, 0x16, 0x80 , 0x16,
84
85 0x65, 0x16, 0x60 , 0x16,
86 0x55, 0x32, 0x65 , 0x16,
87 0x60, 0x16, 0x55 , 0x32,
88
89 0x55, 0x10, 0x4c , 0x10,
90 0x55, 0x10, 0x60 , 0x10,
91 0x65, 0x16, 0x80 , 0x16,
92
93 0x55, 0x10, 0x4c , 0x10,
94 0x55, 0x10, 0x60 , 0x10,
95 0x65, 0x16, 0x80 , 0x16,
96
97 0x72, 0x16, 0xAB , 0x16,
98 0x80, 0x32, 0x72 , 0x16,
99 0xAB, 0x16, 0x80 , 0x32,
100 0x7F, 0x16, 0x72 , 0x16, //格式为: 频率常数, 节拍常数, //两只老虎
101 0x65, 0x16, 0x80 , 0x16,
102 0x7F, 0x16, 0x72 , 0x16,
103 0x65, 0x16, 0x80 , 0x16,
104
105 0x65, 0x16, 0x60 , 0x16,
106 0x55, 0x32, 0x65 , 0x16,
107 0x60, 0x16, 0x55 , 0x32,
108
109 0x55, 0x10, 0x4c , 0x10,
110 0x55, 0x10, 0x60 , 0x10,
111 0x65, 0x16, 0x80 , 0x16,
112
113 0x55, 0x10, 0x4c , 0x10,
114 0x55, 0x10, 0x60 , 0x10,
115 0x65, 0x16, 0x80 , 0x16,
116
117 0x72, 0x16, 0xAB , 0x16,
C51 COMPILER V7.06 1302 12/03/2007 08:44:24 PAGE 3
118 0x80, 0x32, 0x72 , 0x16,
119 0xAB, 0x16, 0x80 , 0x32,
120 0x00
121 };
122
123 void key_set(uchar row,uchar col,uchar max);
124 void set_flash(uchar row,uchar col);
125 void key_set_xq(uchar row,uchar col);
126 void set_alarm_time();
127 void flash(uchar row,uchar col);
128 void see_alarm_time(void);
129 void time_campare();
130
131 /************************************************************************************
132 函数描述:延时
133 入口参数: ms:延时毫秒数
134 出口参数:无
135 *************************************************************************************/
136 void delay1(int ms)
137 {
138 1 unsigned char y;
139 1 while(ms--)
140 1 {
141 2 for(y = 0; y<250; y++)
142 2 {
143 3 _nop_();
144 3 _nop_();
145 3 _nop_();
146 3 _nop_();
147 3 }
148 2 }
149 1 }
150
151 /*****************************************************************
152 函数描述:检查LCD忙状态
153 入口参数:无
154 出口参数:无
155 说明:向lcd写入指令或代码要进行忙状态检测
156 *****************************************************************/
157
158 bit lcd_busy()
159 {
160 1 bit result;
161 1 LCD_RS = 0;
162 1 LCD_RW = 1;
163 1 LCD_EN = 1;
164 1 delayNOP();
165 1 result = (bit)(P0&0x80);
166 1 LCD_EN = 0;
167 1 return(result);
168 1 }
169
170 /********************************************************
171 函数描述:写指令数据到LCD
172 入口参数:cmd:指令代码
173 出口参数:无
174 *********************************************************/
175
176 void lcd_wcmd(uchar cmd)
177 {
178 1 while(lcd_busy());
179 1 LCD_RS = 0;
C51 COMPILER V7.06 1302 12/03/2007 08:44:24 PAGE 4
180 1 LCD_RW = 0;
181 1 LCD_EN = 0;
182 1 _nop_();
183 1 _nop_();
184 1 P0 = cmd;
185 1 delayNOP();
186 1 LCD_EN = 1;
187 1 delayNOP();
188 1 LCD_EN = 0;
189 1 }
190
191 /********************************************************
192 函数描述:写显示数据到LCD
193 入口参数:dat:要写入的数据
194 出口参数: 无
195 *********************************************************/
196 void lcd_wdat(uchar dat)
197 {
198 1 while(lcd_busy());
199 1 LCD_RS = 1;
200 1 LCD_RW = 0;
201 1 LCD_EN = 0;
202 1 P0 = dat;
203 1 delayNOP();
204 1 LCD_EN = 1;
205 1 delayNOP();
206 1 LCD_EN = 0;
207 1 }
208
209 /******************************************************
210 函数描述:LCD初始化设定
211 入口参数:无
212 出口参数:无
213 说明:lcd显示前,调用该函数
214 *********************************************************/
215
216 void init_lcd()
217 {
218 1 delay1(15);
219 1 lcd_wcmd(0x01); //清除LCD的显示内容
220 1
221 1 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
222 1 delay1(5);
223 1 lcd_wcmd(0x38);
224 1 delay1(5);
225 1 lcd_wcmd(0x38);
226 1 delay1(5);
227 1
228 1 lcd_wcmd(0x0c); //显示开,关光标
229 1 delay1(5);
230 1 lcd_wcmd(0x06); //移动光标
231 1 delay1(5);
232 1 lcd_wcmd(0x01); //清除LCD的显示内容
233 1 delay1(5);
234 1 }
235 /*********************************************************/
236 /* */
237 /* 设定显示位置 */
238 /* */
239 /*********************************************************/
240 void write_position(uchar row,uchar col)
241 {
C51 COMPILER V7.06 1302 12/03/2007 08:44:24 PAGE 5
242 1 uchar place;
243 1 if(row==1)
244 1 {
245 2 place=0x80+col-1;
246 2 lcd_wcmd(place);
247 2 }
248 1 else
249 1 {
250 2 place=0xc0+col-1;
251 2 lcd_wcmd(place);
252 2 }
253 1 }
254 /*******************************************************
255 函数描述:写自定义字符到指定位置
256 入口参数:tab:字符代码起始地址(8个代码一个字符)
257 num: 自定义字符代号,(范围1~8,1号存放在40h,2号存放在48h....
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -