📄 gen_display.lst
字号:
C51 COMPILER V7.50 GEN_DISPLAY 08/06/2007 20:01:49 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE GEN_DISPLAY
OBJECT MODULE PLACED IN GEN_DISPLAY.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE GEN_DISPLAY.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**************** File:exp10c.c ***************************
2 *功能:取得随机数0-9,并依次组成8位号码,输出显示。
3 *说明:时间时钟,显示 时 分 秒 时间设置使用Key1 ~Key3
4 * 将跳线器J2、J13、J16分加短接到LED_/CS、MOSI、SPICLK端;
5 * 通过跳线器J8、J9选择高频晶振6MHz
6 ***************************************************************/
7 #include < reg935.h>
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 uchar temp=0x00;
12 uchar j;
13 uchar key1_val=0;//key2_val=0,key3_val=0,key4_val=0;
14 uchar tenms=0x00,second=0,minute=0,hour=12; //时钟初始时间
15 uchar Buffer[6];
16 /* ZLG7289驱动定义 */
17 sbit ZLG7289_CS=P2^0;
18 sbit ZLG7289_CLK=P2^5;
19 sbit ZLG7289_DIO=P2^2;
20 /*按键管脚定义*/
21 sbit Key1=P0^0;
22 sbit Key2=P0^1;
23 sbit Key3=P0^2;
24 sbit Key4=P0^3;
25 //uchar temp2=0x00;
26 //按键定义
27 sbit KEY1=P0^0;
28
29 //函数声明
30 void IO_init();
31 void TIM_init();
32 void ZLG7289_com(uchar dat);
33 void Delay_S(uchar );
34 void Delay_L(uint ) ;
35 void Delay_TF0(uchar t);
36 void ZLG7289_SENDBYTE(uchar dat);
37 void ZLG7289_SENDDAT(uchar dat,uchar loc);
38 void TMdisplay();
39 void DCB_convert();
40 void Set_time();
41 /*函数定义*/
42 void IO_init()
43 {
44 1 P0M1=0x00; // 端口设置 Key1~key4
45 1 P0M2=0x00;
46 1 P2M1=0x00; //spi
47 1 P2M2=0x00;
48 1 }
49 void TIM_init()
50 {
51 1
52 1 /*使用定时器0:工作在定时器状态十六位计数*/
53 1
54 1 TMOD = (TMOD & 0xF0) | 0x01; /* Set T/C0 Mode 用作定时器*/
55 1 TH0=(65536-30000)/256; /*中断设置初始化 */
C51 COMPILER V7.50 GEN_DISPLAY 08/06/2007 20:01:49 PAGE 2
56 1 TL0=(65536-30000)%256;
57 1 ET0 = 1; /* T0中断分路开关*/
58 1 TR0 = 1; /* T0开关TR0 */
59 1 EA = 1;
60 1
61 1 }
62 void ZLG7289_com(uchar dat)
63 {
64 1 ZLG7289_CLK=0;
65 1 ZLG7289_CS=0;
66 1 ZLG7289_SENDBYTE(dat);
67 1 ZLG7289_CS=1;
68 1 }
69 /*us级短延时*/
70 void Delay_S(uchar n)
71 {
72 1 uchar j;
73 1 while(n>0)
74 1 {
75 2 for(j=0;j<20;j--);
76 2 n--;
77 2 }
78 1 }
79 /*ms级短延时*/
80 void Delay_L(uint n)
81 {
82 1 uint i,j;
83 1 i=j=n;
84 1 while(n>0)
85 1 {
86 2 while(i>0)
87 2 {
88 3 while(j>0)
89 3 {
90 4 j--;
91 4 }
92 3 i--;
93 3 }
94 2 n--;
95 2 }
96 1 }
97 void Delay_TF0(uchar t)
98 {
99 1 do
100 1 {
101 2 while(!TF0);
102 2 }while(--t);
103 1 }
104 void ZLG7289_SENDBYTE(uchar dat)
105 {
106 1 uchar i;
107 1 Delay_S(5);
108 1 //ZLG7289_CS=0;
109 1 for (i=0; i<0x8; i++)
110 1 { //ZLG7289_CLK=0;
111 2
112 2 if ( (dat&0x80)!=0 )ZLG7289_DIO=1; //设置数据线
113 2 else ZLG7289_DIO=0;
114 2 Delay_S(1);
115 2 ZLG7289_CLK=1;
116 2 Delay_S(1);
117 2 ZLG7289_CLK=0;
C51 COMPILER V7.50 GEN_DISPLAY 08/06/2007 20:01:49 PAGE 3
118 2 dat=dat<<1; //移动数据
119 2 }
120 1 ZLG7289_DIO=0;
121 1 //ZLG7289_CS=1; //关闭
122 1 }
123
124 void ZLG7289_SENDDAT(uchar dat,uchar loc)
125 {
126 1 ZLG7289_CLK=0;
127 1 ZLG7289_CS=0;
128 1 ZLG7289_SENDBYTE(loc);
129 1 ZLG7289_SENDBYTE(dat);
130 1 ZLG7289_CS=1;
131 1 }
132
133 void TMdisplay()
134 {
135 1 DCB_convert();
136 1 //时
137 1 ZLG7289_SENDDAT(Buffer[0],0x80);
138 1 ZLG7289_SENDDAT(Buffer[1],0x81);
139 1 ZLG7289_SENDDAT(0x0a,0x82); //"-"
140 1 //分
141 1 ZLG7289_SENDDAT(Buffer[2],0x83);
142 1 ZLG7289_SENDDAT(Buffer[3],0x84);
143 1 ZLG7289_SENDDAT(0x0a,0x85); //"-"
144 1 //秒
145 1 ZLG7289_SENDDAT(Buffer[4],0x86);
146 1 ZLG7289_SENDDAT(Buffer[5],0x87);
147 1 }
148 void DCB_convert()
149 {
150 1 //时
151 1 Buffer[1]=hour%10;
152 1 Buffer[0]=hour/10;
153 1 //分
154 1 Buffer[3]=minute%10;
155 1 Buffer[2]=minute/10;
156 1 //秒
157 1 Buffer[5]=second%10;
158 1 Buffer[4]=second/10;
159 1 }
160 void Set_time(void)
161 {
162 1 while(Key1==0)
163 1 {
164 2 //Delay_L(10);
165 2 Delay_TF0(1);
166 2 if(Key1)
167 2 { key1_val++; key1_val%=4;}
168 2 }
169 1
170 1 switch(key1_val)
171 1 {
172 2 case 0:
173 2 ZLG7289_SENDDAT(0xdf,0x88);
174 2 break;
175 2 case 1:
176 2 if(Key2==0)
177 2 {
178 3 while(Key2==0) Delay_L(10); //Delay_L(10);
179 3 hour++;
C51 COMPILER V7.50 GEN_DISPLAY 08/06/2007 20:01:49 PAGE 4
180 3 hour%=24 ;
181 3 }
182 2 if(Key3==0)
183 2 {
184 3 while(Key3==0) Delay_L(10); //Delay_L(10);
185 3 hour--;
186 3 hour%=24 ;
187 3 }
188 2 ZLG7289_SENDDAT(0xfc,0x88);
189 2 break;
190 2
191 2 case 2:
192 2 if(Key2==0)
193 2 {
194 3 while(Key2==0) Delay_L(10); //Delay_L(10);
195 3 minute++;
196 3 minute%=60 ;
197 3 }
198 2 if(Key3==0)
199 2 {
200 3 while(Key3==0) Delay_L(10); //Delay_L(10);
201 3 minute--;
202 3 minute%=60 ;
203 3
204 3 }
205 2 ZLG7289_SENDDAT(0xe7,0x88);
206 2 break;
207 2 case 3:
208 2 if(Key2==0)
209 2 {
210 3 while(Key2==0)Delay_L(10); //Delay_L(10);
211 3 second++;
212 3 second%=60 ;
213 3 }
214 2 if(Key3==0)
215 2 {
216 3 while(Key3==0) Delay_L(10);//Delay_L(10);
217 3 second--;
218 3 second%=60 ;
219 3
220 3 }
221 2 ZLG7289_SENDDAT(0x3f,0x88);
222 2 break;
223 2
224 2 default:break;
225 2 }
226 1 }
227 /*********************************************************************/
228 /*函数:timer0_ISR(void)中断服务程序
229 /*功能:tenms 记时 (second , minute , hour ) */
230 /*********************************************************************/
231 void timer0_ISR (void) interrupt 1 using 1
232 {
233 1 tenms++;
234 1 TH0=(65536-30000)/256; //中断设置初始化
235 1 TL0=(65536-30000)%256;
236 1 //
237 1 if(tenms>=100) //满1秒
238 1 {
239 2 tenms=0; //秒数加1
240 2 if(++second>=60) //满1分
241 2 {
C51 COMPILER V7.50 GEN_DISPLAY 08/06/2007 20:01:49 PAGE 5
242 3 second=0; //分数加1,秒数归零
243 3 if(++minute>=60) //满1小时
244 3 {
245 4 minute=0; //小时数加1,分数归零
246 4 if(++hour>=24)
247 4 { hour=0;}
248 4 }
249 3 }
250 2 }
251 1 }
252 void main()
253 {
254 1 IO_init();
255 1 ZLG7289_com(0xa4);
256 1 TIM_init(); //定时器初始设置
257 1 // ZLG7289_SENDDAT(0xdf,0x88);
258 1 while(1)
259 1 {
260 2 TMdisplay();
261 2 Set_time();
262 2 Delay_L(100);
263 2 }
264 1 }
265
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 586 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -