📄 定时闹钟.lst
字号:
C51 COMPILER V8.02 定时闹钟 06/03/2008 22:08:20 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 定时闹钟
OBJECT MODULE PLACED IN 定时闹钟.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 定时闹钟.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************DS18b20,8051和12864液晶接口电路*********************
2
3 8051 LCD
4
5 数据口:
6 P2.0 DB0
7 P2.1 DB1
8 P2.2 DB2
9 P2.3 DB3
10 P2.4 DB4
11 P2.5 DB5
12 P2.6 DB6
13 P2.7 DB7
14 控制字:
15 P1.3 CSA //低电平有效
16 P1.4 CSB //低电平有效
17 P1.2 RS(DI) //H:Data , L:Instruction
18 P1.1 RW //H:Read , L:Write
19 P1.0 E //高电平有效
20 其他控制接口:
21 VCC RST //低电平复位
22 VCC VDD
23 VCC BLA
24 GND BLK
25 GND GND
26 VEE经10K可变电阻接地,中点接V0
27 液晶选用ks0108控制的12864点阵液晶,程序在S52上成功运行,但在S51上运行不了!!
28 ****************************************************************/
29
30 /**************主程序*****************/
31 #include "reg51.H"
32 #include "intrins.h"
33 #include "DS1302.h"
34
35 SYSTEMTIME time1;
36 unsigned char bdata D=0xff;
37 sbit D_0=D^0;
38 sbit D_1=D^1;
39 sbit D_2=D^2;
40 sbit D_3=D^3;
41 sbit D_4=D^4;
42 sbit D_5=D^5;
43 sbit cs1=P3^3;
44 sbit cs2=P3^4;
45 sbit di=P3^2;
46 sbit rw=P3^1;
47 sbit e=P3^0;
48 sbit K0=P1^0;
49 sbit K1=P1^1;
50 sbit K2=P1^2;
51 sbit K3=P1^3;
52 sbit K4=P1^4;
53 sbit K5=P1^5;
54
55 unsigned char k=16;
C51 COMPILER V8.02 定时闹钟 06/03/2008 22:08:20 PAGE 2
56
57 unsigned char REA_time[10]={0,0,0,0,0,0,0,0,0,0};
58 unsigned char SET_hour[6]={0,0,0,0,0,0};
59 unsigned char SET_minite[6]={0,0,0,0,0,0};
60 /**********************延时函数************************/
61 void delay(unsigned int num)
62 {
63 1 while(num--) ;
64 1 }
65
66 /*************************写LCD函数********************************/
67 void lw(unsigned char x,unsigned char y,unsigned char dd)
68 {
69 1 if (x<64)
70 1 {
71 2 cs1=cs2=0;
72 2 di=rw=0;cs1=1;cs2=0;P0=0xb8|y;e=1;delay(2);e=0;delay(2);
73 2 di=rw=0;cs1=1;cs2=0;P0=0x40|x;e=1;delay(2);e=0;delay(2);
74 2 di=1;rw=0;cs1=1;cs2=0;P0=dd;e=1;delay(2);e=0;delay(2);
75 2
76 2 }
77 1 else
78 1 {
79 2 cs1=cs2=0;x=x-64;
80 2 di=rw=0;cs1=0;cs2=1;P0=0xb8|y;e=1;delay(2);e=0;delay(2);
81 2 di=rw=0;cs1=0;cs2=1;P0=0x40|x;e=1;delay(2);e=0;delay(2);
82 2 di=1;rw=0;cs1=0;cs2=1;P0=dd;e=1;delay(2);e=0;delay(2);
83 2 cs1=cs2=1;
84 2 }
85 1 }
86
87 /************************LCD初始化*************************/
88 void lcd_init(void) {
89 1 unsigned char x,y;
90 1 e=di=rw=0;
91 1 cs1=cs2=1;
92 1 cs1=0;cs2=1;
93 1 di=rw=0;P0=0x3f;e=1;delay(2);e=0;delay(2);
94 1 cs1=0;cs2=1;
95 1 di=rw=0;P0=0xc0;e=1;delay(2);e=0;delay(2);
96 1 cs1=cs2=0;
97 1
98 1 cs1=1;cs2=0;
99 1 di=rw=0;P0=0x3f;e=1;delay(2);e=0;delay(2);
100 1 cs1=1;cs2=0;
101 1 di=rw=0;P0=0xc0;e=1;delay(2);e=0;delay(2);
102 1 cs1=cs2=0;
103 1
104 1 for (y=0;y<8;y++) {
105 2 for (x=0;x<128;x++) lw(x,y,0);
106 2 }
107 1 }
108
109 /**********************************字符取模********************************************/
110
111 unsigned char code yue[32]={0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x0
-0,
112 0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00};
113 unsigned char code ri[32]={0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00
-,
114 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00};
115
C51 COMPILER V8.02 定时闹钟 06/03/2008 22:08:20 PAGE 3
116 unsigned char code shu[10][16]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0
-F,0x00},
117 {0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},
118 {0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},
119 {0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},
120 {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},
121 {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},
122 {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},
123 {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},
124 {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},
125 {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}};
126
127 unsigned char point[16]={0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00};
- //冒号
128 unsigned char kuohao[16]={0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00}
-; //半括号
129 /***************写16*16分辨率汉字************/
130 void write_chinese(x,y,array)
131 unsigned char x,y;
132 unsigned char array[];
133 {
134 1 unsigned char j,dd;
135 1 for(j=0;j<32;j++)
136 1 {
137 2 dd=array[j];
138 2 if(j<16) lw(x+j,y,dd);
139 2 else lw(x+j-16,y+1,dd);
140 2 }
141 1 }
142 /***************写8*16分辨率字母,数字**********/
143 void write_english(x,y,array)
144 unsigned char x,y;
145 unsigned char array[];
146 {
147 1 unsigned char j,dd;
148 1 for(j=0;j<16;j++)
149 1 {
150 2 dd=array[j];
151 2 if(j<8) lw(x+j,y,dd);
152 2 else lw(x+j-8,y+1,dd);
153 2 }
154 1 }
155 /*******************显示函数****************/
156 void display0(void) //显示现在时间
157 {
158 1 write_english(0,0,shu[REA_time[0]]);
159 1 write_english(8,0,shu[REA_time[1]]);
160 1 write_chinese(16,0,yue);
161 1 write_english(32,0,shu[REA_time[2]]);
162 1 write_english(40,0,shu[REA_time[3]]);
163 1 write_chinese(48,0,ri);
164 1 write_english(64,0,shu[REA_time[4]]);
165 1 write_english(72,0,shu[REA_time[5]]);
166 1 write_english(80,0,point);
167 1 write_english(88,0,shu[REA_time[6]]);
168 1 write_english(96,0,shu[REA_time[7]]);
169 1 write_english(104,0,point);
170 1 write_english(112,0,shu[REA_time[8]]);
171 1 write_english(120,0,shu[REA_time[9]]);
172 1 }
173
174 void display1(unsigned char x,unsigned char y,unsigned char z) //显示定时状态x,y为显示屏坐标,z为显示
C51 COMPILER V8.02 定时闹钟 06/03/2008 22:08:20 PAGE 4
-序号
175 {
176 1 write_english(x,y,shu[z+1]);
177 1 write_english(x+8,y,kuohao);
178 1 write_english(x+16,y,shu[SET_hour[z]/10]);
179 1 write_english(x+24,y,shu[SET_hour[z]%10]);
180 1 write_english(x+32,y,point);
181 1 write_english(x+40,y,shu[SET_minite[z]/10]);
182 1 write_english(x+48,y,shu[SET_minite[z]%10]);
183 1 }
184
185 /**************键盘处理****************/
186 void Getch ( )
187 { unsigned char X,Y,Z;
188 1 P2=0xff;
189 1 P2=0x0f; //先对P3置数 行扫描
190 1 if(P2!=0x0f) //判断是否有键按下
191 1 {delay(10); //延时,软件去干扰
192 2 if(P2!=0x0f) //确认按键按下X = P3;
193 2 {
194 3 X=P2; //保存行扫描时有键按下时状态
195 3 P2=0xf0; //列扫描
196 3 Y=P2; //保存列扫描时有键按下时状态
197 3 Z=X|Y; //取出键值
198 3 switch ( Z ) //判断键值(那一个键按下)
199 3 {
200 4 case 0xee: k=0; break; //对键值赋值
201 4 case 0xde: k=1; break;
202 4 case 0xbe: k=2; break;
203 4 case 0x7e: k=3; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -