?? hello.lst
字號:
C51 COMPILER V7.07 HELLO 11/07/2006 19:17:04 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE HELLO
OBJECT MODULE PLACED IN HELLO.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HELLO.C DEBUG OBJECTEXTEND
stmt level source
1 //*******************************************************************
2 //***此程序為調(diào)試通過的源程序
3 //***由南京賽博電子有限公司提供
4 //***文件名:sy0606.C***//
5 //***是51系例單片機的最小系統(tǒng)
6 //***有AT89S51/52的在線下載功能
7 //***IIC總線芯片為24C02,記存密碼
8 //*******************************************************************
9 #include"at89x52.h"
10 #include<intrins.h>
11 #define uchar unsigned char
12 #define uint unsigned int
13 #define nop _nop_() /* 定義空操作指令 */
14 //#define VAR P1
15 sbit rs=P2^2; /*LCD模塊用*/
16 sbit rw=P2^1; /*LCD模塊用*/
17 sbit enable=P2^0; /*LCD模塊用*/
18 sbit SCL=P3^4; /*24C01 CSL接腳=89C51 T0 P3.4*/
19 sbit SDA=P3^5; /*24C01 SDA接腳=89C51 T1 P3.5*/
20 sbit en =P2^7; /*DTLED-6顯示芯片使能端*/
21 sbit dout=P2^6; /*DTLED-6顯示芯片數(shù)據(jù)讀入端*/
22 sbit clk=P2^5; /*DTLED-6顯示芯片/時鐘芯片DS1302時鐘輸入端*/
23 sbit DINOUT=P2^4; /*DS1302時鐘芯片數(shù)據(jù)輸入輸出端*/
24 sbit RST=P2^3; /*DS1302芯片復位起始端*/
25 bit FLAG0=0; /*位標號FLAG0=1鍵盤掃描回應*/
26 bit FLAG1=1; /*位標號20H.1比較密碼回應旗號*/
27 bit FLAG2=1; /*位標號FLAG2=0時,進入鍵盤操作*/
28 bit FLAG3=1; /*位標號FLAG3=0時,鍵盤操作*/
29 bit FLAG4=0; /*位標號FLAG4=0時,鍵盤操作*/
30 bit FLAG5=0; /*位標號FLAG5=1時,存儲*鍵按下*/
31 bit TSendAddress(uchar slaaddress,uchar subaddress,uchar * s,uchar no); /* 向有子地址器件寫入6字節(jié)數(shù)據(jù)函數(shù)
- */
32 bit TRcvAddress(uchar slaaddress,uchar subaddress,uchar * s,uchar no); /* 向有子地址器件讀取6字節(jié)數(shù)據(jù)函數(shù)
- */
33 bit acknow; /* 應答標志位 acknow=1 表示正常響應 acknow=0 表示未響應 */
34 static const char tab[16]={0x01,0x02,0x03,0x0c, /*鍵盤碼00,01,02,03,*/
35 0x04,0x05,0x06,0x0d, /*鍵盤碼04,05,06,07,*/
36 0x07,0x08,0x09,0x0e, /*鍵盤碼08,09,0a,0b,*/
37 0x0a,0x00,0x0b,0x0f};/*鍵盤碼0c,0d,0e,0f*/
38 //static const char tab1[6]={0x01,0x01,0x01,0x01,0x01,0x01};/*內(nèi)定密碼"888888"*/
39 uchar char1[]="Syber Nanjing.Co";
40 uchar char2[]="Password:";
41 uchar dispbuf[9]; /*顯示值存放陣列*/
42 uchar clocktmp[3]; /*顯示值存放陣列*/
43 uchar bufdata[9];
44 uchar buf_rec_com1;
45 uchar bufuart[6]; /*串口接收值存放陣列*/
46 //uchar buf_rec_com1; //huzm
47 //uchar rec_comm1_len=0; //huzm
48 uchar a1=0,clockbak,b1=100,stand=0,m=0,busy,count=10;
49 char ww=0,ptr=0,ptr1=0; /*PTR鍵盤掃描指標,ptr1顯示器掃描指標*/
50 void delay (unsigned int value) /*延時副程式*/
51 {
52 1 while (value!=0) value--; /*10US延時*/
53 1 }
C51 COMPILER V7.07 HELLO 11/07/2006 19:17:04 PAGE 2
54 void Enable(uchar c);
55 void Write1(char *c1);
56 void Write2(char c2);
57 void Write3(void); /* 顯示密碼字符串 */
58 void send_to_Led_a(void); /*串行發(fā)送到DTLED-6副程式*/
59 void BCD(void); /*BCD碼轉(zhuǎn)換副程式*/
60 void clear(void); /*清除按鍵存放/顯示器陣列dispbuf[]副副程式*/
61 void open(void); /*開門比較密碼副程式*/
62 void read24c02(); /*讀24c02的存儲值*/
63 void write24c02(); /*寫24c02的存儲值*/
64 void IICSAVE(void); /*設定密碼并存入buft[]陣列副程式*/
65 //void disp(void); /*顯示存放在dispbuf[]陣列的密碼副程式*/
66 void send_to_Comm1(void); /*串口serial發(fā)送副程式*/
67 void temp(void);
68 void Rd1302st(void); /*讀時鐘芯片DS1302*/
69 void Rd1302(void); /*讀時鐘芯片DS1302*/
70 void Wr1302(void); /*寫時鐘芯片DS1302*/
71 void Start(); /* 起動總線函數(shù) */
72 void Stop(); /* 結(jié)束總線函數(shù) */
73 void SendByte(uchar c); /* 8951發(fā)數(shù)據(jù)或地址給8583 字節(jié)數(shù)據(jù)發(fā)送函數(shù) */
74 uchar RcvByte(); /* 8951從24C01讀數(shù)據(jù)字節(jié)數(shù)據(jù)接收函數(shù) */
75 void Ack(bit a); /* 主機8951應答子函數(shù) */
76 void xch(void); /*宣告按鍵存放/顯示器陣列dispbuf[]右鍵滾入副程式*/
77 void wxb1(void); /*0~9計數(shù),秒*/
78 void wxb2(void); /*0~9計數(shù),分*/
79 void wxb3(void); /*0~9計數(shù),時*/
80 void save_clocks(void); /*按顯示時間更改時鐘*/
81 /*********************************************************************/
82
83 //串行發(fā)送DTLED-6顯示
84 //dispbuf0-dispbuf1-dispbuf2-dispbuf3-dispbuf4-dispbuf5-dispbuf6-dispbuf7-dispbuf8
85 // 小數(shù)點 - 數(shù)碼管1- 數(shù)碼管2- 數(shù)碼管3- 數(shù)碼管4- 數(shù)碼管5- 數(shù)碼管6-ID識別碼-BZ識別碼
86 //00000xxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx
87 //小數(shù)點=1~6,其它為不顯示
88 //數(shù)碼管1-6=0~15,
89 //ID識別碼=0~15
90 //BZ識別碼=BZ.3為蜂鳴輸出控制位,0=關閉,1=打開
91 // BZ0~2為蜂鳴頻率輸出設定為,000=不分頻, 最高頻率輸出=4800Hz;
92 // 001=一次分頻,頻率輸出=4800/ 2 =2400Hz;
93 // 010=二次分頻,頻率輸出=4800/ 4 =1200Hz;
94 // 011=三次分頻,頻率輸出=4800/ 8 =600Hz;
95 // 100=四次分頻,頻率輸出=4800/ 16=300Hz;
96 // 101=五次分頻,頻率輸出=4800/ 32=150Hz;
97 // 110=六次分頻,頻率輸出=4800/ 64=75Hz;
98 // 111=七次分頻,頻率輸出=4800/128=38Hz;
99 //======================================================================
100 void send_to_Led_a(void) /*串行發(fā)送DTLED-6顯示副程式*/
101 {
102 1 char ts0,i,j;
103 1 clk=0;
104 1 en=0;
105 1 delay(10);
106 1 for(j=0;j<9;j++)
107 1 {
108 2 ts0=dispbuf[j];
109 2 for(i=0;i<4;i++) /*發(fā)小數(shù)點碼8,4,2,1*/
110 2 {
111 3 clk=1;
112 3 ts0=ts0<<1;
113 3 if(AC==1)
114 3 dout=1;
115 3 else dout=0;
C51 COMPILER V7.07 HELLO 11/07/2006 19:17:04 PAGE 3
116 3 clk=0;
117 3 nop;
118 3 delay(3);
119 3 }
120 2 }
121 1 en=1;
122 1 } /*返回主程式*/
123 //======================================================================
124 void Write1(char *c1)
125 {while(*c1!=0)
126 1 {Write2(*c1);
127 2 c1++;
128 2 }
129 1 }
130 //======================================================================
131 void Write3(void)
132 {uchar i=6;
133 1 while(i>0)
134 1 { P1=bufdata[i]|0x30;
135 2 rs=1;rw=0;
136 2 enable=1;
137 2 delay(2);
138 2 enable=0;
139 2 i--;
140 2 }
141 1 }
142 //======================================================================
143 void Write2(char c2)
144 {P1=c2;
145 1 rs=1;rw=0;enable=1;
146 1 delay(2);
147 1 enable=0;
148 1 }
149 //======================================================================
150 void Enable(uchar c)
151 {
152 1 P1=c;
153 1 rs=0;rw=0;enable=1;
154 1 delay(2);
155 1 enable=0;
156 1 }
157
158 /***********************************************************************/
159 void temp(void)
160 { FLAG2=0;
161 1 if(tab[ptr]==0x0e)
162 1 {
163 2 //disp(); /*如果是按“C”則呼叫顯示密碼DISP*/
164 2 dispbuf[0]=0x03; /*小數(shù)點位*/
165 2 }
166 1 else /*否則往下執(zhí)行*/
167 1 {
168 2 switch(tab[ptr]) /*是則測試ptr鍵盤掃描計數(shù)器指標至TAB[]取到的鍵盤碼*/
169 2 {
170 3 case 0x0a:
171 3 write24c02(); /*是否按“*”是則呼叫設定密碼SET*/
172 3 clear(); /*是否按“#”是則呼叫清除顯示器CLEAR*/
173 3 break; /*跳出此循環(huán)*/
174 3 case 0x0b:
175 3 clear(); /*是否按“#”是則呼叫清除顯示器CLEAR*/
176 3 break; /*跳出此循環(huán)*/
177 3 case 0x0c: /*是否按“A”,未規(guī)劃鍵待用戶自己定義*/
C51 COMPILER V7.07 HELLO 11/07/2006 19:17:04 PAGE 4
178 3 FLAG2=1; P3_6=1;
179 3 dispbuf[0]=0x03; /*小數(shù)點位*/
180 3 break; /*跳出此循環(huán)*/
181 3 case 0x0d: /*是否按“B”,未規(guī)劃鍵待用戶自己定義*/
182 3 break; /*跳出此循環(huán)*/
183 3 case 0x0e: /*是否按“C”,已偵測過*/
184 3 read24c02(); /*呼叫讀取密碼存放在DATE1[]副程式*/
185 3 break; /*跳出此循環(huán)*/
186 3 case 0x0f:
187 3 open(); /*是否按“D”,是則呼比較密碼開門副程式*/
188 3 dispbuf[0]=0x03; /*小數(shù)點位*/
189 3 goto openend;
190 3 break; /*跳出此循環(huán)*/
191 3 default:
192 3 xch(); /*以上均不是則為數(shù)字鍵呼叫XCH作右鍵滾入*/
193 3 break; /*跳出此循環(huán)*/
194 3 } /*跳出SWITCH*/
195 2 delay(100); /*按鈕抗機械反彈跳*/
196 2 while(m==P0); /*按鈕放開否?*/
197 2 send_to_Led_a(); /*串行發(fā)送到DTLED-6副程式*/
198 2 openend: nop;
199 2 }
200 1 } /*返回上一層程式*/
201 /****************************************************/
202 void temp_setclock(void) /*判斷有按鍵輸入否?*/
203 {
204 1 switch(dispbuf[0]) /*是則測試ptr鍵盤掃描計數(shù)器指標至TAB[]取到的鍵盤碼*/
205 1 {
206 2 case 0x01:
207 2 wxb1(); /*0~9計數(shù)*/
208 2 break; /*跳出此循環(huán)*/
209 2 case 0x03:
210 2 wxb1(); /*0~9計數(shù)*/
211 2 break; /*跳出此循環(huán)*/
212 2 case 0x05:
213 2 wxb2(); /*0~2,0~4計數(shù)*/
214 2 break; /*跳出此循環(huán)*/
215 2 default: /*以上均不是*/
216 2 break; /*跳出此循環(huán)*/
217 2 }
218 1 delay(100); /*按鈕抗機械反彈跳*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -