📄 temp.lst
字号:
C51 COMPILER V7.02b TEMP 09/10/2005 10:01:41 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE TEMP
OBJECT MODULE PLACED IN Temp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Temp.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg51.h"
2 #include "intrins.h"
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 sbit SDA=P3^0;
7 sbit SCL=P3^1;
8
9 sbit Ok_Key=P0^7;
10 sbit Up_Key=P2^7;
11 sbit Down_Key=P1^7;
12
13 bit Key;
14 bit Flash;
15 bit Write;
16
17 uchar b;
18 uchar s;
19 uchar g;
20
21 uint Tcount;
22 uint TimeCount;
23 uint TimeSet;
24 uchar KeyCount;
25
26 //unsigned code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
27 //上面注释的是标准的数码管字形码,由于P0.0、P1.0和P2.0是键盘端口
28 //所以,就将这些字形码的最高位置1,这样不会对键盘扫描产生负面影响
29
30 unsigned code tab[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
31 //函数列表
32 void delay(void);
33 void Delay(int time);
34 void delay1(void);
35 void write_8bit(unsigned char ch);
36 void ACK(void);
37 uchar ReadIIC_24C01(unsigned char address);
38 void WriteIIC_24C01(unsigned char address,unsigned char ddata);
39 void init(void);
40 void DataDivision(uint Ddata);
41 void LedFlash(uchar No);
42 void KBScan(void);
43 void Display(void);
44 void delays(void);
45
46 //键盘中断服务程序
47 //首先INT0触发,进入中断服务程序。然后检测是哪个键按下
48 //如果是Ok_Key按下,检测它处于哪个状态(分为四个状态:修改百位、十位、个位和确认),然后显示对应的要修改信
-息
49 //如果下一个外部中断触发,同样确认是哪个键,再根据Ok_Key键所处的状态,对的位进行增加、减少修改,同时也可以
-进行
50 //进行数据确认并写入EEPROM,这样,时间设定就完成了,接下来单片机进行倒计时
51 void intersvr0(void) interrupt 0 using 1
52 {
53 1 ET0=0;
C51 COMPILER V7.02b TEMP 09/10/2005 10:01:41 PAGE 2
54 1 TR0=0;
55 1 if(!Ok_Key) //中断触发后,确认是哪一个键按下
56 1 {
57 2 if(KeyCount==0)//第一次按Ok_Key键,进入第一个状态,修改百位
58 2 {
59 3 KeyCount++;
60 3 P1=0x80;
61 3 P2=0x80;
62 3 P0=tab[b];
63 3 }
64 2 else if(KeyCount==1)//第二次按Ok_Key键,进入第二个状态,修改十位
65 2 {
66 3 KeyCount++;
67 3 P0=tab[b];
68 3 P2=tab[s];
69 3 P1=0x80;
70 3 }
71 2 else if(KeyCount==2)//第三次按Ok_Key键,进入第三个状态,修改个位
72 2 {
73 3 KeyCount++;
74 3 P0=tab[b];
75 3 P2=tab[s];
76 3 P1=tab[g];
77 3 }
78 2 else //确认,并把数据写入EEPROM
79 2 {
80 3 KeyCount=0;
81 3 Write=1;
82 3 }
83 2 }
84 1 else if(!Up_Key) //中断触发后,确认是哪一个键按下
85 1 {
86 2 if(KeyCount==1) //Ok_Key键位于第一个状态,对百位数据进行调整
87 2 {
88 3 if(b==9)
89 3 b=0;
90 3 else
91 3 b=b+1;
92 3 P1=0x80;
93 3 P2=0x80;
94 3 P0=tab[b];
95 3 }
96 2 else if(KeyCount==2) //Ok_Key键位于第二个状态,对百位数据进行调整
97 2 {
98 3 if(s==9)
99 3 s=0;
100 3 else
101 3 s=s+1;
102 3 P1=0x80;
103 3 P2=tab[s];
104 3 P0=tab[b];
105 3 }
106 2 else if(KeyCount==3) //Ok_Key键位于第三个状态,对百位数据进行调整
107 2 {
108 3 if(g==9)
109 3 g=0;
110 3 else
111 3 g=g+1;
112 3 P1=tab[g];
113 3 P2=tab[s];
114 3 P0=tab[b];
115 3 }
C51 COMPILER V7.02b TEMP 09/10/2005 10:01:41 PAGE 3
116 2 else
117 2 return;
118 2 }
119 1 else if(!Down_Key) //中断触发后,确认是哪一个键按下
120 1 {
121 2 if(KeyCount==1) //Ok_Key键位于第一个状态,对百位数据进行调整
122 2 {
123 3 if(b==0)
124 3 b=9;
125 3 else
126 3 b=b-1;
127 3 P1=0x80;
128 3 P2=0x80;
129 3 P0=tab[b];
130 3 }
131 2 else if(KeyCount==2) //Ok_Key键位于第二个状态,对百位数据进行调整
132 2 {
133 3 if(s==0)
134 3 s=9;
135 3 else
136 3 s=s-1;
137 3 P1=0x80;
138 3 P2=tab[s];
139 3 P0=tab[b];
140 3 }
141 2 else if(KeyCount==3)//Ok_Key键位于第三个状态,对百位数据进行调整
142 2 {
143 3 if(g==0)
144 3 g=9;
145 3 else
146 3 g=g-1;
147 3 P1=tab[g];
148 3 P2=tab[s];
149 3 P0=tab[b];
150 3 }
151 2 else
152 2 return;
153 2 }
154 1 }
155
156
157 /////////////////
158 //12M晶振最大延时为65.536ms,这里延时为50ms
159 void time0(void) interrupt 1 using 1
160 {
161 1
162 1 TH0=(65536-50000)/256; //设置定时器高8位初值
163 1 TL0=(65536-50000)%256; //设置定时器低8位初值
164 1
165 1 if(Tcount==20) //通过调整数字可以确定计数的最小单位
166 1 { //例如,如果为20,表示每1s数码管数据改变一次,如果为1200,则是1m改变一
-次
167 2 Tcount=0;
168 2 TimeCount=TimeCount-1; //用来长时间定时
169 2 }
170 1 b=TimeCount/100; //将当前数据的百、十、个位分离
171 1 s=(TimeCount/10)%10;
172 1 g=TimeCount%10;
173 1
174 1 P0=tab[b]; //分离后的数据显示到数码管
175 1 P2=tab[s];
176 1 P1=tab[g];
C51 COMPILER V7.02b TEMP 09/10/2005 10:01:41 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -