📄 复件 main.lst
字号:
C51 COMPILER V8.02 复件_MAIN 11/26/2008 14:20:21 PAGE 1
C51 COMPILER V8.02, 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 程序名称:一个单片机控制数码显示块的正计时程序;
3 描述:单片机的P0口并行输出,驱动数码管的A-G的各段位,
4 P2口的前三个口通过三极管选择各数码管。
5 P1、P3做数码块的初始值设定。
6 通过T0的方式1做计时,计时不太准确。
7 适用:只显示安全的天数,要求不太精确的地方。
8 缺点:计时时从加电时开始计时,增加变化时在加电时刻(以后天数)
9 ***********************************************************/
10
11 #include <reg51.h>
12 #define uchar unsigned char
13 #define uint unsigned int
14
15 code uchar a[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
16
17 uchar k,m,n;
18
19 int timer;
20
21 delay(void){
22 1
23 1 uchar i,j;
24 1 for(i=0;i<50;i++){
25 2 for(j=0;j<50;j++){;}
26 2 }
27 1 }
28 /***定时器初始化程序*************/
29 void timer_init(void)
30 {
31 1
32 1 TMOD = 0x01; /*定时器0方式1*/
33 1 TH0=0xB1; /* 计数初值写入TH0 */
34 1 TL0=0xDF; /* 写入计数初值到TL0 */
35 1 ET0=1; /* 定时器0中断允许*/
36 1 EA=1; /* 全局中断允许 */
37 1 TF0=0; /* 定时器0中断标志位清0 */
38 1 TR0 = 1;
39 1 }
40 //定时器中断处理
41 void timer_0() interrupt 1 using 1
42 {
43 1
44 1 TH0=0xB1; /* 计数初值写入TH0 */
45 1 TL0=0xDF; /* 写入计数初值到TL0 20MS*/
46 1 if(timer == 100) {
47 2 if(n<9){
48 3 n++;
49 3 }else{
50 3 if(m<9){
51 4 n = 0;m++;
52 4 }else{n = 0;m = 0;k++;}
53 3 }
54 2 timer = 0;
55 2 }else{
C51 COMPILER V8.02 复件_MAIN 11/26/2008 14:20:21 PAGE 2
56 2 timer++;
57 2 }
58 1 }
59 void main(void){
60 1 P1 = P3 = 0xFF;
61 1 timer_init();
62 1
63 1 /*确定个位的初始值*/
64 1 switch (P1&0x0F)
65 1 {
66 2 case 0: n = 0;break;
67 2 case 1: n = 1;break;
68 2 case 2: n = 2;break;
69 2 case 3: n = 3;break;
70 2 case 4: n = 4;break;
71 2 case 5: n = 5;break;
72 2 case 6: n = 6;break;
73 2 case 7: n = 7;break;
74 2 case 8: n = 8;break;
75 2 default: n = 9;break;
76 2 }
77 1
78 1 /*确定十位的初始值*/
79 1 switch (P1&0xF0)
80 1 {
81 2 case 0: m = 0;break;
82 2 case 16: m = 1;break;
83 2 case 32: m = 2;break;
84 2 case 48: m = 3;break;
85 2 case 64: m = 4;break;
86 2 case 80: m = 5;break;
87 2 case 96: m = 6;break;
88 2 case 112: m = 7;break;
89 2 case 128: m = 8;break;
90 2 default: m = 9;break;
91 2
92 2 }
93 1
94 1 /*确定百位的初始值*/
95 1 switch (P3&0x0F)
96 1 {
97 2 case 0: k = 0;break;
98 2 case 1: k = 1;break;
99 2 case 2: k = 2;break;
100 2 case 3: k = 3;break;
101 2 case 4: k = 4;break;
102 2 case 5: k = 5;break;
103 2 case 6: k = 6;break;
104 2 case 7: k = 7;break;
105 2 case 8: k = 8;break;
106 2 default: k = 9;break;
107 2 }
108 1
109 1 while(1){
110 2 P2 = 0x01; P0 = a[k];
111 2 delay();
112 2 P2 = 0x02; P0 = a[m];
113 2 delay();
114 2 P2 = 0x04; P0 = a[n];
115 2 delay();
116 2 }
117 1 }
C51 COMPILER V8.02 复件_MAIN 11/26/2008 14:20:21 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 415 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -