📄 4_3.lst
字号:
C51 COMPILER V6.12 4_3 10/03/2007 18:18:05 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 4_3
OBJECT MODULE PLACED IN .\4_3.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\lesson4\4_3.c DEBUG OBJECTEXTEND PRINT(.\4_3.lst) OBJECT(.\4_3.obj)
stmt level source
1 /*******************************************************************/
2 /* TX-1C单片机实验板实验例程 */
3 /* 2007年8月第二期培训班课后习题详解 */
4 /* 作者:郭天祥 */
5 /* 邮箱:txmcu@163.com */
6 /* 网站:www.txmcu.com(天祥电子) */
7 /*【版权】Copyright(C)天祥电子 www.txmcu.com All Rights Reserved */
8 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
9 /* */
10 /*******************************************************************/
11 /*
12 利用动态扫描和定时器1在数码管上显示
13 出从765432开始以1/10秒的速度往下递减
14 直至765398并保持显示此数,与此同时利
15 用定时器0以500MS速度进行流水灯从上至
16 下移动,当数码管上数减到停止时,实验
17 板上流水灯也停止然后全部开始闪烁,3秒
18 后(用T0定时)流水灯全部关闭、数码管上
19 显示出"HELLO"。到此保持住。
20 设晶振频率为12MHz。
21 */
22 /*********************************************************/
23 #include<reg52.h> //52单片机头文件
24 #include <intrins.h> //包含有左右循环移位子函数的库
25 #define uint unsigned int //宏定义
26 #define uchar unsigned char //宏定义
27 sbit dula=P2^6;
28 sbit wela=P2^7;
29 uchar code table[]={ //显示数据编码
30 0x3f,0x06,0x5b,0x4f,
31 0x66,0x6d,0x7d,0x07,
32 0x7f,0x6f,0x77,0x7c,
33 0x39,0x5e,0x79,0x71,
34 0x76,0x79,0x38,0x3f,0};
35 uchar temp,t0,t1,bai,shi,ge,flag,flag1;
36 uint shu;
37 void init(); //函数声明
38 void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);
39 void delay(uint z) //延时子函数
40 {
41 1 uint x,y;
42 1 for(x=z;x>0;x--)
43 1 for(y=110;y>0;y--);
44 1 }
45 void main() //主函数
46 {
47 1 init();
48 1 while(1)
49 1 {
50 2 if(flag1!=1) //如果flagi不再等于1则显示数据
51 2 display(7,6,5,bai,shi,ge);
52 2 else
53 2 display(16,17,18,18,19,20); //否则显示hello
54 2 }
55 1 }
C51 COMPILER V6.12 4_3 10/03/2007 18:18:05 PAGE 2
56
57 void init() //初始化函数
58 {
59 1 shu=432;
60 1 temp=0xfe;
61 1 P1=temp;
62 1 TMOD=0x11;
63 1 TH0=(65536-50000)/256; //定时器初始化
64 1 TL0=(65536-50000)%256;
65 1 TH1=(65536-50000)/256;
66 1 TL1=(65536-50000)%256;
67 1 EA=1;
68 1 ET0=1;
69 1 ET1=1;
70 1 TR0=1;
71 1 TR1=1;
72 1 }
73
74 void timer0() interrupt 1 //定时器0中断
75 {
76 1 TH0=(65536-50000)/256;
77 1 TL0=(65536-50000)%256;
78 1 t0++;
79 1 if(flag!=1) //flag不等于1时进行流水灯
80 1 {
81 2 if(t0==10)
82 2 {
83 3 t0=1;
84 3 temp=_crol_(temp,1);
85 3 P1=temp;
86 3 }
87 2 }
88 1 else //否则进行灯闪烁
89 1 {
90 2 if(t0%4==0) //小灯每200毫秒变化一次
91 2 P1=~P1;
92 2 if(t0==60)
93 2 {
94 3 TR0=0; //3秒后关闭定时器0,关闭灯,并置flag=1
95 3 P1=0xff;
96 3 flag1=1;
97 3 }
98 2 }
99 1 }
100
101 void timer1() interrupt 3 //定时器1中断函数
102 {
103 1 TH1=(65536-50000)/256;
104 1 TL1=(65536-50000)%256;
105 1 t1++;
106 1 if(t1==2)
107 1 {
108 2 t1=0;
109 2 shu--;
110 2 bai=shu/100;
111 2 shi=shu%100/10;
112 2 ge=shu%10;
113 2 if(shu==398) //当到398时把原来T0中的数清除,重新加裁初值让小灯闪烁
114 2 {
115 3 TR0=0;
116 3 TH0=(65536-50000)/256;
117 3 TL0=(65536-50000)%256;
C51 COMPILER V6.12 4_3 10/03/2007 18:18:05 PAGE 3
118 3 TR0=1;
119 3 flag=1;
120 3 t0=0;
121 3 P1=0xff;
122 3 TR1=0;
123 3 }
124 2 }
125 1 }
126
127 void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge) //显示子函数
128 {
129 1 dula=1;
130 1 P0=table[aa];
131 1 dula=0;
132 1 P0=0xff;
133 1 wela=1;
134 1 P0=0xfe;
135 1 wela=0;
136 1 delay(1);
137 1
138 1 dula=1;
139 1 P0=table[bb];
140 1 dula=0;
141 1 P0=0xff;
142 1 wela=1;
143 1 P0=0xfd;
144 1 wela=0;
145 1 delay(1);
146 1
147 1 dula=1;
148 1 P0=table[cc];
149 1 dula=0;
150 1 P0=0xff;
151 1 wela=1;
152 1 P0=0xfb;
153 1 wela=0;
154 1 delay(1);
155 1 dula=1;
156 1 P0=table[bai];
157 1 dula=0;
158 1 P0=0xff;
159 1 wela=1;
160 1 P0=0xf7;
161 1 wela=0;
162 1 delay(1);
163 1
164 1 dula=1;
165 1 P0=table[shi];
166 1 dula=0;
167 1 P0=0xff;
168 1 wela=1;
169 1 P0=0xef;
170 1 wela=0;
171 1 delay(1);
172 1
173 1 dula=1;
174 1 P0=table[ge];
175 1 dula=0;
176 1 P0=0xff;
177 1 wela=1;
178 1 P0=0xdf;
179 1 wela=0;
C51 COMPILER V6.12 4_3 10/03/2007 18:18:05 PAGE 4
180 1 delay(1);
181 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 470 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 6
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 + -