📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 04/20/2009 16:06:22 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*---------------------------------------------------------------*
2 ************************ design by ghtyoo ************************
3 *----------------------------------------------------------------*/
4 #include <reg51.h>
5 #include <init.h>
6 void Time_C(void);
7 void Clock_C(void);
8 void ring_c(void) ;
9 void Delay(unsigned char i);
10 extern void ring(void);
11 extern void LCD_Write(unsigned char cmd);
12 extern void LCD_Write_Com(unsigned char com);
13 extern void LCD_Write_Dat(unsigned char dat);
14 extern void LCD_Write_Dat_Nmov(unsigned char dat);
15 extern void LCDInit(void);
16 extern void TimeInit(void);
17 extern void LCD_Show1(void);
18 extern unsigned char Key_Scan(void);
19 extern unsigned char LCD_Read_Dat(unsigned char com);
20 extern void Watch(void);
21 extern void Right(void);
22 extern void Left(void);
23 unsigned char store_c,store_i,count,time[3],date[3],store[6];
24 unsigned char wc,wd2,wd1,wd0;
25
26 void main()
27 {
28 1 unsigned char i,m,n,j,temp;
29 1 store_c=0; //闹钟设置完成标志初始化
30 1 store_i=0; //闹钟设置进行中标志初始化
31 1 SPEAK=1;
32 1 i=0xff;//定义一个没用过的数
33 1 LCDInit();
34 1 LCD_Show1();
35 1 EA=0;
36 1 TimeInit();
37 1 while(1)
38 1 {
39 2 temp=i;
40 2 i=Key_Scan();
41 2 if(i==temp)
42 2 continue; //消除按键抖动
43 2 switch(i)
44 2 {
45 3 case '1':LCD_Write_Dat_Nmov('1');break;
46 3 case '2':LCD_Write_Dat_Nmov('2');break;
47 3 case '3':LCD_Write_Dat_Nmov('3');break;
48 3 case '4':LCD_Write_Dat_Nmov('4');break;
49 3 case '5':LCD_Write_Dat_Nmov('5');break;
50 3 case '6':LCD_Write_Dat_Nmov('6');break;
51 3 case '7':LCD_Write_Dat_Nmov('7');break;
52 3 case '8':LCD_Write_Dat_Nmov('8');break;
53 3 case '9':LCD_Write_Dat_Nmov('9');break;
54 3 case '0':LCD_Write_Dat_Nmov('0');break;
55 3 // case 'T':LCD_Write_Dat('T');break; //上电开始就有调时间,不需要这个键来特定调时间
C51 COMPILER V8.08 MAIN 04/20/2009 16:06:22 PAGE 2
56 3 // case 'C':LCD_Write_Dat('C');break; //时间都没调好,还来什么闹钟,
57 3 // case 'W':LCD_Write_Dat('W');break;
58 3 // case 'L':LCD_Write_Dat('L');break;
59 3 // case 'R':LCD_Write_Dat('R');break;
60 3 // case 'B':LCD_Write_Dat('B');break;
61 3 // case 'W':Watch();break;
62 3 case 'L':Left() ;break;
63 3 case 'R':Right();break;
64 3 default:break;
65 3 }
66 2 if (i=='B')
67 2 {
68 3 date[0]=(LCD_Read_Dat(0x85)-'0')*10+(LCD_Read_Dat(0x86)-'0');
69 3 date[1]=(LCD_Read_Dat(0x88)-'0')*10+(LCD_Read_Dat(0x89)-'0');
70 3 date[2]=(LCD_Read_Dat(0x8b)-'0')*10+(LCD_Read_Dat(0x8c)-'0');
71 3 time[0]=(LCD_Read_Dat(0xc4)-'0')*10+(LCD_Read_Dat(0xc5)-'0');
72 3 time[1]=(LCD_Read_Dat(0xc7)-'0')*10+(LCD_Read_Dat(0xc8)-'0');
73 3 time[2]=(LCD_Read_Dat(0xca)-'0')*10+(LCD_Read_Dat(0xcb)-'0');
74 3 LCD_Write_Com(0x0c);//开显示,关光标,不闪烁
75 3 break;
76 3 }
77 2 }
78 1 TR0=1; //定时器0开始计数
79 1 ET0=1; //打开定时器0中断
80 1 EA=1; //开总中断
81 1 m=time[2];
82 1 while(1)
83 1 {
84 2 n=time[2];
85 2 if((m!=n)&&(store_i==0)) //一秒更一次,当闹钟没正在设置时
86 2 {
87 3 LCD_Write_Com(0x83);
88 3 LCD_Write_Dat('2');
89 3 LCD_Write_Com(0x84);
90 3 LCD_Write_Dat('0');
91 3 LCD_Write_Com(0x87);
92 3 LCD_Write_Dat('-');
93 3 LCD_Write_Com(0x8a);
94 3 LCD_Write_Dat('-');
95 3 LCD_Write_Com(0xc6);
96 3 LCD_Write_Dat(':');
97 3 LCD_Write_Com(0xc9);
98 3 LCD_Write_Dat(':');
99 3 LCD_Write_Com(0x85); //日 期
100 3 LCD_Write_Dat(date[0]/10+'0'); //年数少于100年
101 3 LCD_Write_Com(0x86);
102 3 LCD_Write_Dat(date[0]%10+'0');
103 3 LCD_Write_Com(0x88);
104 3 LCD_Write_Dat(date[1]/10+'0');
105 3 LCD_Write_Com(0x89);
106 3 LCD_Write_Dat(date[1]%10+'0');
107 3 LCD_Write_Com(0x8b);
108 3 LCD_Write_Dat(date[2]/10+'0');
109 3 LCD_Write_Com(0x8c);
110 3 LCD_Write_Dat(date[2]%10+'0');
111 3 LCD_Write_Com(0xc4); //时间
112 3 LCD_Write_Dat(time[0]/10+'0');
113 3 LCD_Write_Com(0xc5);
114 3 LCD_Write_Dat(time[0]%10+'0');
115 3 LCD_Write_Com(0xc7);
116 3 LCD_Write_Dat(time[1]/10+'0');
117 3 LCD_Write_Com(0xc8);
C51 COMPILER V8.08 MAIN 04/20/2009 16:06:22 PAGE 3
118 3 LCD_Write_Dat(time[1]%10+'0');
119 3 LCD_Write_Com(0xca);
120 3 LCD_Write_Dat(time[2]/10+'0');
121 3 LCD_Write_Com(0xcb);
122 3 LCD_Write_Dat(time[2]%10+'0');
123 3 m=n;
124 3 }
125 2 if(store_c==1) //闹钟
126 2 if((store[0]==date[0])&&(store[1]==date[1])&&(store[2]==date[2])
127 2 &&(store[3]==time[0])&&(store[4]==time[1])&&(store[5]==time[2]))
128 2 {
129 3 ring_c();
130 3 }
131 2 j=Key_Scan();
132 2 if(j=='T')
133 2 {
134 3 Time_C();
135 3 }
136 2 if(j=='C')
137 2 {
138 3 Clock_C();
139 3 }
140 2 if(j=='W')
141 2 Watch();
142 2 }
143 1
144 1 }
145 /*********************时钟设置******************************/
146 void Time_C(void)
147 {
148 1 unsigned char i,temp;
149 1 i=0xff;//定义一个没用过的数
150 1 TR0=0;
151 1 ET0=0;
152 1 LCD_Write_Com(0x80);
153 1 LCD_Write_Dat('T');
154 1 LCD_Write_Com(0x83);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -