📄 timer.lst
字号:
C51 COMPILER V7.50 TIMER 08/01/2012 22:41:36 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE timer.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***************************************************************************
2 标题: PWM
3 效果: 数码管做精确的秒计数00-99
4 技术支持QQ群:73535837
5 说明: 板使用12M晶振
6 ******************************************************************************/
7
8 //头文件:
9 #include "reg51.h"
10
11 //变量定义:
12 unsigned char table[]=
13 {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
14 //表:共阳数码管 0-9
15 extern unsigned char timer0=0; //作为计数时间量
16 unsigned int pwm_index=10;//PWM占空比西系数
17 unsigned char lold=1; //作为按键放开的凭证,1为放开,0为按下
18 unsigned char led=0;
19
20 //引脚定义:
21 sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
22 sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)
23 sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)
24 sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)
25
26 sbit led0 = P2^0; //定义第一个LED灯
27 sbit led1 = P2^1;
28 sbit led2 = P2^2;
29 sbit led3 = P2^3;
30 sbit led4 = P2^4;
31 sbit led5 = P2^5;
32 sbit led6 = P2^6;
33 sbit led7 = P2^7;
34 sbit key1 = P3^7; //定义按键1
35 sbit key2 = P3^6; //定义按键1
36 sbit key3 = P3^5; //定义按键1
37
38 //函数声明:
39 void displaylow(unsigned char da);
40 void displayhigh(unsigned char da);
41 void delay(void);
42 void init(); //初如化函数
43 void light(unsigned int level,unsigned char led);
44
45 //主函数,C语言的入口函数:
46 void main()
47 {
48 1
49 1 init(); //初始化中断控制寄存器
50 1 while(1)
51 1 { if(key1==0) //按键1按下,LED1灯亮
52 2 { if(lold)
53 3 {
54 4 pwm_index++;
55 4 lold=0;
C51 COMPILER V7.50 TIMER 08/01/2012 22:41:36 PAGE 2
56 4
57 4 }
58 3 }
59 2
60 2
61 2 else if(key2==0) //按键1按下,LED1灯亮
62 2 { if(lold)
63 3 { if(pwm_index==0)
64 4 pwm_index=0;
65 4 else pwm_index--;
66 4 }
67 3 lold=0;
68 3
69 3 }
70 2 else if(key3==0) //按键1按下,LED1灯亮
71 2 { if(lold)led++;
72 3 lold=0;
73 3 }
74 2 else lold=1;
75 2 light(0,0);
76 2 light(1,1);
77 2 light(4,2);
78 2 light(15,3);
79 2 light(15,4);
80 2 light(1,5);
81 2 light(4,6);
82 2 light(0,7);
83 2 displayhigh(led);
84 2 displaylow(pwm_index);
85 2
86 2 }
87 1 }
88
89 //初始化函数
90 void init()
91 {
92 1
93 1 timer0=0;
94 1 TMOD=0X01; //设置定时器1为模式一,即16位计算模式
95 1 TH0=(65536-2003)/256; //给计数寄存器赋值,1毫秒时间
96 1 TL0=(65536-2003)%256;
97 1 EA=1; //开启总中断
98 1 ET0=1; //开启定时器0中断
99 1 TR0=1; //启定定时器0
100 1 }
101
102 //中断函数,关键字"interrupt" , 这是C语言的中断函数表示法,1表时定地器0
103 void timer() interrupt 1
104 {
105 1 TH0=(65536-503)/256; //重新赋值
106 1 TL0=(65536-503)%256;
107 1 timer0++; //0.5毫秒加1
108 1 // if(timer0==pwm_index)
109 1 // { led0=0; }
110 1 if(timer0==20)
111 1 { timer0=0;
112 2 }
113 1
114 1 }
115
116 //显示函数,参数为显示内容,只显示两位数
117 void displaylow(unsigned char da)
C51 COMPILER V7.50 TIMER 08/01/2012 22:41:36 PAGE 3
118 {
119 1 SMG_s=0; //选择十位数码管
120 1 P0=table[da/10]; //获取十位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
121 1 delay(); //延时
122 1 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
123 1 SMG_s=1; //关闭十位数码管
124 1
125 1 SMG_g=0; //选择个位数码管
126 1 P0=table[da%10]; //获取个位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
127 1 delay(); //延时
128 1 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
129 1 SMG_g=1; //关闭个位数码管
130 1 }
131
132 void displayhigh(unsigned char da)
133 {
134 1 SMG_q=0; //选择十位数码管
135 1 P0=table[da/10]; //获取十位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
136 1 delay(); //延时
137 1 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
138 1 SMG_q=1; //关闭十位数码管
139 1
140 1 SMG_b=0; //选择个位数码管
141 1 P0=table[da%10]; //获取个位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
142 1 delay(); //延时
143 1 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
144 1 SMG_b=1; //关闭个位数码管
145 1 }
146
147 void light(unsigned int level,unsigned char led) //level为5级,5最亮,1最暗
148 {
149 1 //led=led&&0x03;
150 1 switch(led)
151 1 { case 0: if(timer0<level) led0=0;
152 2 else led0=1;
153 2 break;
154 2 case 1: if(timer0<level) led1=0;
155 2 else led1=1;
156 2 break;
157 2 case 2: if(timer0<level) led2=0;
158 2 else led2=1;
159 2 break;
160 2 case 3: if(timer0<level) led3=0;
161 2 else led3=1;
162 2 break;
163 2 case 4: if(timer0<level) led4=0;
164 2 else led4=1;
165 2 break;
166 2 case 5: if(timer0<level) led5=0;
167 2 else led5=1;
168 2 break;
169 2 case 6: if(timer0<level) led6=0;
170 2 else led6=1;
171 2 break;
172 2 case 7: if(timer0<level) led7=0;
173 2 else led7=1;
174 2 break;
175 2 }
176 1
177 1 }
178
179
C51 COMPILER V7.50 TIMER 08/01/2012 22:41:36 PAGE 4
180 //延时子函数,短暂延时
181 void delay(void){
182 1 unsigned char i=10;
183 1 while(i--);
184 1 }
185
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 431 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 15 2
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 + -