?? yijia.lst
字號(hào):
C51 COMPILER V3.20, SN-50203013 YIJIA 06/29/07 20:42:04 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE YIJIA
OBJECT MODULE PLACED IN C:\MC\YIJIA.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE C:\MC\YIJIA.C DB SB OE
stmt level source
1 #include <reg51.h>
2
3 #define USE_KEY
4 #define CH451_RESET 0x0201 /*復(fù)位 */
5 #define CH451_LEFTMOV 0x0300 /*設(shè)置移動(dòng)方式-左移 */
6 #define CH451_LEFTCYC 0x0301 /*設(shè)置移動(dòng)方式-左循 */
7 #define CH451_RIGHTMOV 0x0302 /*設(shè)置移動(dòng)方式-右移 */
8 #define CH451_RIGHTCYC 0x0303 /*設(shè)置移動(dòng)方式-右循 */
9 #define CH451_SYSOFF 0x0400 /*關(guān)顯示、鍵盤、看門狗 */
10 #define CH451_SYSON1 0x0401 /*開(kāi)顯示 */
11 #define CH451_SYSON2 0x0403 /*開(kāi)顯示、鍵盤、關(guān)看門狗 */
12 #define CH451_SYSON3 0x0407 /*開(kāi)顯示、鍵盤、看門狗功能 */
13 #define CH451_DSP 0x0500 /*設(shè)置默認(rèn)顯示方式 */
14 #define CH451_BCD 0x0580 /*設(shè)置BCD譯碼方式 */
15 #define CH451_USER 0x05c0 /*設(shè)置BCD譯碼方式、4位數(shù)碼管、最亮*/
16 #define CH451_TWINKLE 0x0600 /*設(shè)置閃爍控制的命令碼,無(wú)閃爍 */
17 #define CH451_TWINKLE1 0x0601 /*設(shè)置閃爍控制--從右向左計(jì)數(shù),1閃爍(DIG0驅(qū)動(dòng)) */
18 #define CH451_TWINKLE2 0x0602 /*設(shè)置閃爍控制--從右向左計(jì)數(shù),2閃爍(DIG1驅(qū)動(dòng)) */
19 #define CH451_TWINKLE3 0x0604 /*設(shè)置閃爍控制--從右向左計(jì)數(shù),3閃爍(DIG2驅(qū)動(dòng)) */
20 #define CH451_TWINKLE4 0x0608 /*設(shè)置閃爍控制--從右向左計(jì)數(shù),4閃爍(DIG3驅(qū)動(dòng)) */
21 #define CH451_TWINKLE5 0x0610 /*設(shè)置閃爍控制--從右向左計(jì)數(shù),5閃爍(DIG4驅(qū)動(dòng)) */
22 #define CH451_TWINKLE6 0x0620 /*設(shè)置閃爍控制--從右向左計(jì)數(shù),6閃爍(DIG5驅(qū)動(dòng)) */
23 #define CH451_TWINKLE7 0x0640 /*設(shè)置閃爍控制--從右向左計(jì)數(shù),7閃爍(DIG6驅(qū)動(dòng)) */
24 #define CH451_TWINKLE8 0x0680 /*設(shè)置閃爍控制--從右向左計(jì)數(shù),8閃爍(DIG7驅(qū)動(dòng)) */
25 #define CH451_DIG0 0x0800 /*送數(shù)碼管位0顯示的數(shù)據(jù),本值或上一個(gè)要顯示的值即可
-*/
26 #define CH451_DIG1 0x0900 /*送數(shù)碼管位1顯示的數(shù)據(jù),本值或上一個(gè)要顯示的值即可 */
27 #define CH451_DIG2 0x0a00 /*送數(shù)碼管位2顯示的數(shù)據(jù),本值或上一個(gè)要顯示的值即可 */
28 #define CH451_DIG3 0x0b00 /*送數(shù)碼管位3顯示的數(shù)據(jù),本值或上一個(gè)要顯示的值即可 */
29 #define CH451_DIG4 0x0c00 /*送數(shù)碼管位4顯示的數(shù)據(jù),本值或上一個(gè)要顯示的值即可 */
30 #define CH451_DIG5 0x0d00 /*送數(shù)碼管位5顯示的數(shù)據(jù),本值或上一個(gè)要顯示的值即可
-*/
31 #define CH451_DIG6 0x0e00 /*送數(shù)碼管位6顯示的數(shù)據(jù),本值或上一個(gè)要顯示的值即可 *
-/
32 #define CH451_DIG7 0x0f00 /*送數(shù)碼管位7顯示的數(shù)據(jù),本值或上一個(gè)要顯示的值即可 */
33 #define CH451_KEY 0x07 /*讀取鍵值的命令碼 */
34
35 #define maxp 3000
36 #define minp 30
37
38 typedef unsigned char U8 ;
39 typedef unsigned int U16;
40
41 bit pf; /* 有脈沖信號(hào)標(biāo)志*/
42 bit t10msf; /* 10ms 間隔到標(biāo)志 */
43 bit udf; /*需要顯示更新標(biāo)志 */
44
45 bit kf; /*有按鍵按下標(biāo)志*/
46 bit k1f; /*按鍵k1按下標(biāo)志--左鍵--啟動(dòng)、確認(rèn)*/
47 // bit k2f; /*按鍵k2按下標(biāo)志--中左鍵--移位*/
48 // bit k3f; /*按鍵k3按下標(biāo)志--中右鍵--增1*/
49 // bit k4f; /*按鍵k3按下標(biāo)志--右鍵--減1*/
50
51 sbit HC14=P3^2; /* INT0, 光電信號(hào)輸入口*/
52 sbit jout=P2^0; /* 噴碼信號(hào)輸出口*/
C51 COMPILER V3.20, SN-50203013 YIJIA 06/29/07 20:42:04 PAGE 2
53
54
55 /* CH451接口*/
56 sbit ch451_dout=P3^3; /* INT1,鍵盤中斷和鍵值數(shù)據(jù)輸入,接CH451的數(shù)據(jù)輸出*/
57 sbit ch451_load=P1^0; /*串行命令加載,上升延激活 */
58 sbit ch451_din=P1^1; /*串行數(shù)據(jù)輸出,接CH451的數(shù)據(jù)輸入 */
59 sbit ch451_dclk=P1^7; /*串行數(shù)據(jù)時(shí)鐘上升延激活 */
60 U8 ch451_key; /* 存放鍵盤中斷中讀取的鍵值 */
61
62 sbit s=P1^2; /* 93c46的片選 */
63 sbit c=P1^3; /* 93c46的串行時(shí)鐘 */
64 sbit d=P1^4; /* 93c46的數(shù)據(jù)輸入 */
65 sbit q=P1^6; /* 93c46的數(shù)據(jù)輸出 */
66
67 U8 skv[4]; /*顯示緩存,4字節(jié),分別存放要顯示的個(gè)、十、百、千*/
68 U16 setv; /*設(shè)置的脈沖數(shù)值*/
69 U16 cv; /*當(dāng)前接受的脈沖數(shù)值*/
70
71 void int0() interrupt 0 using 1 /*光電輸入中斷*/
72 {
73 1 /*設(shè)置光電輸入標(biāo)志 */
74 1 pf=1;
75 1
76 1 }
77 /*void int1() interrupt 2 using 1 /* 鍵盤輸入中斷*/
78 /*{
/*設(shè)置按鍵按下標(biāo)志 */
80 /* kf=1;
} */
83 void time0() interrupt 1 using 1 /* 設(shè)置T0為10ms中斷*/
84 {
85 1 TH0=0xdc; /* 重裝時(shí)間常數(shù)*/
86 1 TL0=0x0;
87 1 t10msf=1;
88 1 }
89
90
91 void updatedisp(unsigned char* disp,bit twif,unsigned char twip); /* 更新顯示*/
92 U16 read93(U8 ax);
93 void write93(U8 ax, U16 dx);
94 void erwren93(void);
95 void erwrdisen93(void);
96 void erase93(U8 ax);
97 void eraseall93(void);
98 void writeall93(U16 dx);
99 U8 ch451_read();
100 void ch451_init();
101 void ch451_write(U16 command);
102 void delay();
103
104 void main()
105 {
106 1 U16 temp1,temp2,temp3;
107 1 U8 ck,shift;
108 1 /* 初始化*/
109 1 P1=0x00; /* 初始化輸出端口*/
110 1 P2=0x00;
111 1
112 1 SP=0x5f; /* 初始化堆棧指針*/
113 1
114 1 /* 初始化變量*/
C51 COMPILER V3.20, SN-50203013 YIJIA 06/29/07 20:42:04 PAGE 3
115 1 pf=0;
116 1 k1f=0;
117 1 kf=0;
118 1
119 1 temp1=read93(2);
120 1 temp2=read93(4);
121 1 temp3=read93(6);
122 1 if(temp1==temp2)
123 1 setv=temp1;
124 1 else if(temp2==temp3)
125 1 setv=temp2;
126 1 else
127 1 setv=temp1;
128 1 if(setv<minp)
129 1 {
130 2 setv=3000;
131 2 erwren93();
132 2 write93(2,0xaaaa);
133 2 write93(4,0xaaaa);
134 2 write93(6,0xaaaa);
135 2 erwrdisen93();
136 2 }
137 1 cv=0;
138 1 skv[0]=setv%10;
139 1 skv[1]=(setv%100)/10;
140 1 skv[2]=(setv%1000)/100;
141 1 skv[3]=(setv/1000);
142 1 udf=1;
143 1
144 1 /* 初始化芯片ch451*/
145 1 ch451_init(); /*調(diào)用初始化 */
146 1
147 1 /* 初始化CPU*/
148 1 IP=0x05; /* 兩個(gè)外中斷為高優(yōu)先級(jí)*/
149 1 TCON=0x05; /*設(shè)置外中斷為下降沿觸發(fā) */
150 1 /* 允許兩個(gè)外中斷*/
151 1 EX0=1;
152 1 EX1=1;
153 1
154 1 // TMOD=0x21; /* 設(shè)置T0/T1工作方式:T0為方式1, 16位定時(shí)器,T1為波特率發(fā)生器,8位自裝入方式
-*/
155 1 // TH0=0x0dc; /* 設(shè)置T0為10ms中斷--12Mp:d8f0*///10*1000/(12/12M)=10000(T), (65536-10000)=
-0xd8f0
156 1 // TL0=0x0; //11.0592Mp:10ms=10*1000us, 10*1000/(12/11.0592M)=9216(T), (65536-9216)=0xd
-c00
157 1 // TR0=1; /* 啟動(dòng)T0*/
158 1 // ET0=1; /* 允許T0中斷*/
159 1
160 1 // ES=1; /* 允許串口中斷*/
161 1
162 1 EA=1; /* 開(kāi)中斷*/
163 1
164 1 /* 開(kāi)始運(yùn)行*/
165 1 while(1)
166 1 {
167 2 if(pf) /* 有光電信號(hào)*/
168 2 {
169 3 pf=0;
170 3 cv++; /*當(dāng)前脈沖數(shù)值增1 */
171 3 if(cv>=setv) /*如果當(dāng)前脈沖數(shù)與設(shè)置值相等,則重新開(kāi)始計(jì)數(shù),并發(fā)出一個(gè)脈沖--用于噴碼機(jī)動(dòng)作 *
-/
172 3 {
C51 COMPILER V3.20, SN-50203013 YIJIA 06/29/07 20:42:04 PAGE 4
173 4 cv=0;
174 4
175 4 jout=1;
176 4 jout=0;
177 4 }
178 3 /*更新顯示*/
179 3 skv[0]=cv%10;
180 3 skv[1]=(cv%100)/10;
181 3 skv[2]=(cv%1000)/100;
182 3 skv[3]=(cv/1000);
183 3 udf=1; /*脈沖數(shù)改變,需要更新顯示 */
184 3
185 3 }
186 2 if(kf) /*有按鍵--按鍵處理 */
187 2 {
188 3 kf=0;
189 3 if(k1f) /*已經(jīng)按過(guò)啟動(dòng)鍵的按鍵操作處理 */
190 3 {
191 4 if(ch451_key==0x40) /*減1鍵操作,當(dāng)前設(shè)置位之值發(fā)生改變*/
192 4 {
193 5 if(ck==0)
194 5 ck=9;
195 5 else
196 5 ck--;
197 5 }
198 4 else if(ch451_key==0x41) /*增1鍵操作,當(dāng)前設(shè)置位之值發(fā)生改變*/
199 4 {
200 5 if(ck==9)
201 5 ck=0;
202 5 else
203 5 ck++;
204 5 }
205 4 else if(ch451_key==0x42) /*移位鍵操作*/
206 4 {
207 5 skv[shift]=ck; /*獲取修改過(guò)的當(dāng)前設(shè)置位之值,暫存起來(lái) */
208 5 if(shift==3) /*改變?cè)O(shè)置位*/
209 5 shift=0;
210 5 else
211 5 shift++;
212 5 ck=skv[shift]; /*取得新設(shè)置位之值,用于修改 */
213 5 }
214 4 else if(ch451_key==0x43) /*確認(rèn)鍵--與啟動(dòng)按鍵操作是同一鍵,第1次按是啟動(dòng),第2次按是確認(rèn)
-*/
215 4 {
216 5 k1f=0;
217 5
218 5 /*計(jì)算新的設(shè)置值,并保存新的設(shè)置值*/
219 5 setv=skv[3]*1000+skv[2]*100+skv[1]*10+skv[0];
220 5 erwren93();
221 5 write93(2,setv);
222 5 write93(4,setv);
223 5 write93(6,setv);
224 5 erwrdisen93();
225 5 /*設(shè)置完畢,重新顯示為當(dāng)前脈沖數(shù) */
226 5 skv[0]=cv%10;
227 5 skv[1]=(cv%100)/10;
228 5 skv[2]=(cv%1000)/100;
229 5 skv[3]=(cv/1000);
230 5 }
231 4
232 4 }
233 3 else if(ch451_key==0x43) /*啟動(dòng)鍵--與確認(rèn)按鍵操作是同一鍵,第1次按是啟動(dòng),第2次按是確認(rèn)*/
C51 COMPILER V3.20, SN-50203013 YIJIA 06/29/07 20:42:04 PAGE 5
234 3 {
235 4 k1f=1; /*k1f=1表明當(dāng)前在操作按鍵設(shè)置,顯示設(shè)置值,并閃爍*/
236 4 skv[0]=setv%10;
237 4 skv[1]=(setv%100)/10;
238 4 skv[2]=(setv%1000)/100;
239 4 skv[3]=(setv/1000);
240 4
241 4 /*首先設(shè)置個(gè)位,個(gè)位閃爍 */
242 4 shift=0; /*表明當(dāng)前設(shè)置位--也是閃爍位 */
243 4 ck=skv[shift]; /*取當(dāng)前要設(shè)置的值 */
244 4 }
245 3 else
246 3 {
247 4 /*沒(méi)有按啟動(dòng)鍵,先按了其它鍵,則其它的功能處理*/
248 4
249 4 }
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -