📄 ht1621.lst
字号:
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE HT1621
OBJECT MODULE PLACED IN ht1621.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ht1621.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 #include <AT89x52.h>
3 #include <intrins.h>
4 #include "93LC66.c"
5
6 struct
7 {unsigned char hour;
8 unsigned char min;
9 unsigned char sec;
10 }time1={12,0,0};
11 struct
12 {unsigned int hourclock;
13 unsigned int minclock;
14 unsigned int ampmclock;
15 }time2={7,0,0};
16
17 unsigned char Count=0,i=0,ampm=0,sec20=0;
18 unsigned int counter=300;
19 unsigned char Light_flag=0,Ledloop=0;
20 bit _500msflag=0,beep_flag=0;
21
22
23 void inc_hour(void);
24 void inc_min(void);
25 void inc_sec(void);
26 void ProcessKey(void);
27 void ScanKey(void);
28 void DisplayChange(void);
29 void light(void);
30 void delayms(unsigned int i);
31
32 #define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com
33 #define SYSDIS 0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
34 #define LCDOFF 0X04 //0b1000 0000 0100 关LCD偏压
35 #define LCDON 0X06 //0b1000 0000 0110 打开LCD偏压
36 #define SYSEN 0X02 //0b1000 0000 0010 打开系统振荡器
37 #define XTAL 0x28 //0b1000 0010 1000 外部接时钟
38 #define RC256 0X30 //0b1000 0011 0000 内部时钟
39 #define TONEON 0X12 //0b1000 0001 0010 打开声音输出
40 #define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出
41 #define WDTDIS 0X0a //0b1000 0000 1010 禁止看门狗*/
42 #define Switch P2_5
43 #define Up1 P2_4
44 #define Up2 P2_3
45 #define Uphour P2_2
46 #define Upmin P2_1
47 #define Enter P2_0
48
49
50 //HT1621控制位(液晶模块接口定义,根据自已的需要更改)
51 sbit HT1621_DAT=P3^5;
52 sbit HT1621_CS=P3^7; //lower enable
53 sbit HT1621_WR=P3^6; //rising edge
54
55 //0,1...8,9,A,P
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 2
56 unsigned char code Ht1621code[]=
57 {0xeb,0x60,0xc7,0xe5,0x6c,0xad,0xaf,0xe0,0xef,0xed,0xee,0xce};
58
59 unsigned char code Led[4]={0x01,0x04,0x02,0x08};
60
61
62 void DelayMS1(uint iMs)
63 {
64 1 uint i,j;
65 1 for(i=0;i<iMs;i++)
66 1 for(j=0;j<65;j++)
67 1 delayms(1);
68 1 }
69 //完成写一个命令包括头(100)
70 void Ht1621WrCmd(uchar ucTmpCmd)
71 {
72 1 uchar data i,ucCmdByte=0x80;
73 1 HT1621_CS=0;
74 1 _Nop();
75 1 _Nop();
76 1 for (i=0;i<4;i++)
77 1 {
78 2 if (ucCmdByte&0x80) HT1621_DAT=1;
79 2 else HT1621_DAT=0;
80 2 HT1621_WR=0;
81 2 _Nop();
82 2 _Nop();
83 2 HT1621_WR=1;
84 2 _Nop();
85 2 ucCmdByte<<=1;
86 2 }
87 1 for (i=0;i<8;i++)
88 1 {
89 2 if (ucTmpCmd&0x80) HT1621_DAT=1;
90 2 else HT1621_DAT=0;
91 2 HT1621_WR=0;
92 2 _Nop();
93 2 _Nop();
94 2 HT1621_WR=1;
95 2 _Nop();
96 2 ucTmpCmd<<=1;
97 2 }
98 1 HT1621_CS=1;
99 1 _Nop();
100 1 _Nop();
101 1 }
102
103 //写命令+地址
104 void Ht1621WrDataCmd(uchar ucAddr)
105 { uchar data i,ucDataCmd=0x05; //101
106 1 HT1621_CS=0;
107 1 _Nop();
108 1 _Nop();
109 1 ucDataCmd<<=5;
110 1 for (i=0;i<3;i++)
111 1 {
112 2 if (ucDataCmd&0x80) HT1621_DAT=1;
113 2 else HT1621_DAT=0;
114 2 HT1621_WR=0;
115 2 _Nop();
116 2 _Nop();
117 2 HT1621_WR=1;
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 3
118 2 _Nop();
119 2 ucDataCmd<<=1;
120 2 }
121 1 ucAddr<<=2;
122 1 for (i=0;i<6;i++)
123 1 {
124 2 if (ucAddr&0x80) HT1621_DAT=1;
125 2 else HT1621_DAT=0;
126 2 HT1621_WR=0;
127 2 _Nop();
128 2 _Nop();
129 2 HT1621_WR=1;
130 2 _Nop();
131 2 ucAddr<<=1;
132 2 }
133 1 }
134
135 //完成写一个字节数据
136 void Ht1621WrByte(uchar ucTmpData)
137 {
138 1 uchar data i;
139 1 for (i=0;i<8;i++)
140 1 {
141 2 if (ucTmpData&0x80) HT1621_DAT=1;
142 2 else HT1621_DAT=0;
143 2 HT1621_WR=0;
144 2 _Nop();
145 2 _Nop();
146 2 HT1621_WR=1;
147 2 _Nop();
148 2 ucTmpData<<=1;
149 2 }
150 1 HT1621_CS=1;
151 1 _Nop();
152 1 _Nop();
153 1 }
154 void Ht1621WrByteDot(uchar ucTmpData)
155 {
156 1 uchar data i;
157 1 for (i=0;i<4;i++)
158 1 {
159 2 if (ucTmpData&0x80) HT1621_DAT=1;
160 2 else HT1621_DAT=0;
161 2 HT1621_WR=0;
162 2 _Nop();
163 2 _Nop();
164 2 HT1621_WR=1;
165 2 _Nop();
166 2 ucTmpData<<=1;
167 2 }
168 1 HT1621_CS=1;
169 1 _Nop();
170 1 _Nop();
171 1 }
172
173 void Ht1621_Init(void)
174 {
175 1 HT1621_CS=1;
176 1 HT1621_WR=0;
177 1 HT1621_DAT=1;
178 1 Ht1621WrCmd(BIAS);
179 1 Ht1621WrCmd(RC256); //使用内部振荡器
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 4
180 1 Ht1621WrCmd(TONEOFF);
181 1 Ht1621WrCmd(LCDOFF);
182 1 Ht1621WrCmd(SYSDIS);
183 1 Ht1621WrCmd(WDTDIS);
184 1 Ht1621WrCmd(SYSEN);
185 1 Ht1621WrCmd(LCDON);
186 1 }
187
188 void ProcessKey(void)
189 {if(Count==1)
190 1 {if(Up1==0)
191 2 {DelayMS1(55);
192 3 if(Up1==0)
193 3 inc_hour();
194 3 }
195 2 else if(Up2==0)
196 2 {DelayMS1(55);
197 3 if(Up2==0)
198 3 inc_min();
199 3 }
200 2 }
201 1 else if(Count==2)
202 1 {if(Up1==0)
203 2 {DelayMS1(55);
204 3 if(Up1==0)
205 3 ampm=!ampm;
206 3 }
207 2 else if(Up2==0)
208 2 {DelayMS1(55);
209 3 if(Up2==0)
210 3 TR0=0;
211 3 inc_sec();
212 3 }
213 2 }
214 1 else if(Count==3)
215 1 {if(Uphour==0)
216 2 {DelayMS1(55);
217 3 if(Uphour==0)
218 3 time2.ampmclock=!time2.ampmclock;
219 3 }
220 2 }
221 1 else if(Count==4)
222 1 {if(Uphour==0)
223 2 {DelayMS1(55);
224 3 if(Uphour==0)
225 3 {time2.hourclock++;
226 4 if(time2.hourclock>12)
227 4 time2.hourclock=1;}
228 3 }
229 2 else if(Upmin==0)
230 2 {DelayMS1(55);
231 3 if(Upmin==0)
232 3 {time2.minclock++;
233 4 if(time2.minclock>59)
234 4 {time2.minclock=0;
235 5 time2.hourclock++;
236 5 if(time2.hourclock>12)
237 5 time2.hourclock=1;
238 5 }
239 4 }
240 3 }
241 2 }
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 5
242 1 if(Enter==0)
243 1 {Count=0;
244 2 WRITE(0x03,time2.ampmclock);//ampm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -