📄 51
字号:
C51 COMPILER V8.09 EX73 07/12/2010 13:38:42 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE EX73
OBJECT MODULE PLACED IN ex73.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ex73.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //独立式键盘控制的4级变速流水灯
2 #include<reg52.h> // 包含51单片机寄存器定义的头文件
3 unsigned char speed; //储存流水灯的流动速度
4 sbit S1=P3^2; //位定义S1为P3.2
5 sbit S2=P3^3; //位定义S2为P3.3
6 sbit S3=P3^4; //位定义S3为P3.4
7 sbit S4=P3^5; //位定义S4为P3.5
8 /**************************************************************
9 函数功能:延时20ms的子程序
10 **************************************************************/
11 void delay20ms(void) //3*i*j+2*i=3*100*60+2*100=20000μs=20ms;
12 {
13 1 unsigned char i,j;
14 1 for(i=0;i<100;i++)
15 1 for(j=0;j<60;j++)
16 1 ;
17 1 }
18 /**************************************************************
19 函数功能:延时可调子程序
20 入口参数:x
21 **************************************************************/
22 void delay(unsigned char x)
23 {
24 1 unsigned char k;
25 1 for(k=0;k<x;k++)
26 1 delay20ms();
27 1 }
28 /**************************************************************
29 函数功能:主函数
30 **************************************************************/
31 void main(void)
32 {
33 1 TMOD=0x02; //使用定时器T0的模式2
34 1 EA=1; //开总中断
35 1 ET0=1; //定时器T0中断允许
36 1 TR0=1; //定时器T0开始运行
37 1 TH0=256-200; //定时器T0赋初值,每200微妙来1次中断请求
38 1 TL0=256-200;
39 1 speed=3; //默认流水灯流水点亮延时20ms×3=60ms
40 1 while(1)
41 1 {
42 2 P1=0xfe; //第一个灯亮
43 2 delay(speed); //调用延时可调子程序
44 2 P1=0xfd; //第二个灯亮
45 2 delay(speed);
46 2 P1=0xfb; //第三个灯亮
47 2 delay(speed);
48 2 P1=0xf7; //第四个灯亮
49 2 delay(speed);
50 2 P1=0xef; //第五个灯亮
51 2 delay(speed);
52 2 P1=0xdf; //第六个灯亮
53 2 delay(speed);
54 2 P1=0xbf; //第七个灯亮
55 2 delay(speed);
C51 COMPILER V8.09 EX73 07/12/2010 13:38:42 PAGE 2
56 2 P1=0x7f; //第八个灯亮
57 2 delay(speed);
58 2 P1=0xff;
59 2 }
60 1 }
61 /**************************************************************
62 函数功能:定时器T0的中断服务子程序,进行键盘扫描
63 **************************************************************/
64 void intersev(void) interrupt 1 using 1
65 {
66 1 TR0=0; //关闭定时器T0/
67 1 P3=0xff; //将P1口的均置高电平"1"
68 1 if((P3&0x3C)!=0x3C) //如果有键按下
69 1 {
70 2 delay20ms(); //延时20ms,软件消抖
71 2 if((P3&0x3c)!=0x3c) //确实有键按下
72 2 {
73 3 if(S1==0) //如果是按键S1按下
74 3 speed=5; //流水灯流水点亮延时20ms×5=100ms
75 3 if(S2==0) //如果是按键S2按下
76 3 speed=10; //流水灯流水点亮延时20ms×10=200ms
77 3 if(S3==0) //如果是按键S3按下
78 3 speed=25; //流水灯流水点亮延时20ms×25=500ms
79 3 if(S4==0) //如果是按键S4按下
80 3 speed=50; //流水灯流水点亮延时20ms×50=1000ms
81 3 }
82 2 }
83 1 TR0=1; //启动定时器T0
84 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 178 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -