?? 時鐘_1602.lst
字號:
C51 COMPILER V7.50 時鐘_1602 08/18/2007 17:24:18 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 時鐘_1602
OBJECT MODULE PLACED IN 時鐘_1602.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE 時鐘_1602.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4
5 uchar tmp[4]= {"28^C"};
6 uchar num[12]={"0123456789 :"};//數(shù)字?jǐn)?shù)數(shù)組
7 uchar time[8]={0};
8 uchar t1_set[4]={0};
9 uchar adj[6]={"adjust"};
10 uchar adj_0[6]={" time"};
11 uchar adj_1[6]={" t1 "};
12
13
14 uchar off[4]={"off "};
15 uchar ON[4]= {"on "};//ON[]兩個字母均為大寫,用小寫時會出錯,也不知為什么
16
17 uchar hour0=12,hour1=12,minute0=0,minute1=0,second=0;//設(shè)置初始值,顯示12。00
18 uchar ten_hour,hour,ten_minute,minute;//
19 uchar key=0,right=0,set=0;//
20
21 bit key_flag=0;//
22 bit s_flag=0;
23 bit adj_flag=0;
24 bit dp_flag=0;
25 bit time_flag=0;
26 bit out=1,out1;
27
28 sbit set_key=P3^2;
29 sbit up_key=P3^3;
30 sbit right_key=P3^4;
31 sbit on_off_key=P3^5;
32
33 sbit p_out1=P1^0;
34
35 void t0(void);//定時0中斷函數(shù)聲明
36 void t1(void);//定時1中斷函數(shù)聲明
37 void time_display(void);//走時顯示子程序
38 void t_adj(void);//走時調(diào)整子程序
39 void t1_adj(void);//
40 void t1_out(void);
41 void key_scan(void);//鍵盤掃描子程序
42
43 /******************************************************************
44 1602程序部分
45 數(shù)據(jù)總線接到p2口 用到1ms延時程序 <intrins.h>函數(shù)
46 *******************************************************************/
47
48 uchar command[]={0x38,0x38,0x38,0x38,0x08,0x01,0x06,0x0c}; /* P2=0x01;//清屏并光標(biāo)復(fù)位
49 P2=00111000;//顯示模式設(shè)置,8位總線,2行,5*7
50 P2=0x0c;//開顯示。光標(biāo)和閃爍
51 P2=0x06;//文字不動,光標(biāo)自動右移
52 P2=0x80;//寫入的起始位置,第1行第1列*/
53
54 sbit e=P3^7;
55 sbit rw=P3^6;
C51 COMPILER V7.50 時鐘_1602 08/18/2007 17:24:18 PAGE 2
56 sbit rs=P3^0;
57 sbit busy=P2^7;
58
59
60 //--------------------------延時程序-------------------------------
61 void delay(uchar i)
62 { uchar a;
63 1 while(i--)
64 1 {for(a=0;a<=125;a++)
65 2 {;}
66 2 }
67 1 }
68 //--------------------查LCD是否忙程序-----------------------
69 void wait(void)
70 { do
71 1 { P2=0xff;
72 2 rs=0;//
73 2 rw=1;//
74 2 e=0;
75 2 _nop_();
76 2 e=1; }
77 1 while(busy==1);
78 1 }
79
80
81 //-------------------數(shù)據(jù)寫入函數(shù)-------------------------
82 void dataw(uchar da)
83 { wait();
84 1 rs=1;
85 1 rw=0;
86 1 e=1;
87 1 P2=da;
88 1 e=0;
89 1 }
90
91
92 //-------------------指令和顯示地址寫入子函數(shù)------------
93
94 void comw(uchar da)
95 { wait();
96 1 rs=0;
97 1 rw=0;
98 1 e=1;
99 1 P2=da;
100 1 e=0;
101 1 }
102
103
104 //--------------------------初始化--------------------------------
105 void init(void)
106 { uchar i;
107 1 delay(20);
108 1 e=1;
109 1 for(i=0;i<8;i++)
110 1 {comw(command[i]);
111 2 delay(5);
112 2 }
113 1
114 1 }
115 //--------------------------清屏-----------------------------------
116 void clen(void)
117 { uchar i;
C51 COMPILER V7.50 時鐘_1602 08/18/2007 17:24:18 PAGE 3
118 1 comw(0x80);
119 1 for(i=0;i<16;i++)
120 1 dataw(0x02);
121 1 comw(0xc0);
122 1 for(i=0;i<16;i++)
123 1 dataw(0x02);
124 1
125 1 }
126 /****************************************************************************
127 主函數(shù)
128
129 *****************************************************************************/
130 main()
131 { uchar i=0;
132 1
133 1 TMOD=0x11; //設(shè)置工作方式,T0 50ms 中斷計時,T1定時10ms中斷,數(shù)碼管和鍵盤掃描
134 1
135 1 TH0=(65536-46080)/256;//
136 1 TL0=(65536-46080)%256;// 50ms定時
137 1
138 1 TH1=(65536-10000)/256;
139 1 TL1=(65536-10000)%256;//10ms定時
140 1 TR1=1; //
141 1 TR0=1; //
142 1 ET0=1; //
143 1 ET1=1; //
144 1 EA=1; //
145 1 init();//1602初始化
146 1 while(1)
147 1 {
148 2 if(key_flag) key_scan();//當(dāng)確定有鍵按下了,就調(diào)用鍵盤掃描程序,判斷那個鍵按下了
149 2
150 2 switch(set) //根據(jù)set的值判斷該顯示哪個
151 2 { case 0:{if(s_flag==1){s_flag=0;time_display();}} break;//走時顯示
152 3 case 1:{if(adj_flag==1){adj_flag=0;t_adj();}}break;//走時調(diào)整顯示
153 3 case 2:{if(adj_flag==1){adj_flag=0;t1_adj();}}break;}//定時輸出1調(diào)整顯示
154 2 //case 3:t2_adj();break;}//定時輸出2調(diào)整顯示
155 2
156 2 t1_out();//判斷定時輸出1時間到了沒有
157 2 // t2_out();//判斷定時輸出2時間到了沒有
158 2
159 2 }
160 1
161 1
162 1
163 1 }
164
165
166
167 /****************************************************************************************
168 顯示時間子程序
169
170 *****************************************************************************************/
171
172 void time_display(void)
173 { uchar i=0;
174 1
175 1 time[0]=hour0/10;//
176 1 time[1]=hour0%10;
177 1 time[3]=minute0/10;
178 1 time[4]=minute0%10;
179 1 time[6]=second/10;
C51 COMPILER V7.50 時鐘_1602 08/18/2007 17:24:18 PAGE 4
180 1 time[7]=second%10;//將時間拆分
181 1 clen();
182 1 ////////////////////////////////////////////////////////////
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -