📄 +
字号:
C51 COMPILER V7.50 红绿灯 05/16/2010 11:36:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 红绿灯
OBJECT MODULE PLACED IN 红绿灯.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 红绿灯.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*-----------------------------------------------
2 名称:红绿灯
3 内容:1、程序目的:使用定时器学习 倒计时 红绿灯原理 主要程序和倒计时一样
4 2、硬件要求:数码管、晶振12M
5 ------------------------------------------------*/
6 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
7
8 bit red,green,yellow,turnred;//定义红绿黄灯标志位
9
10 code unsigned char tab[]=
11 {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
12 //共阴数码管 0-9
13
14 unsigned char Dis_Shiwei;//定义十位
15 unsigned char Dis_Gewei; //定义个位
16 /******************************************************************/
17 /* 延时函数 */
18 /******************************************************************/
19 void delay(unsigned int cnt)
20 {
21 1 while(--cnt);
22 1 }
23 /******************************************************************/
24 /* 主函数 */
25 /******************************************************************/
26 main()
27 {
28 1 TMOD |=0x01;//定时器设置 10ms in 12M crystal
29 1 TH0=0xd8;
30 1 TL0=0xf0;
31 1 IE= 0x82; //打开中断
32 1 TR0=1;
33 1
34 1 P1=0xfc; //红灯亮
35 1 red =1;
36 1 while(1)
37 1 {
38 2 P0=Dis_Shiwei;//显示十位
39 2 P2=0;
40 2 delay(300); //短暂延时
41 2 P0=Dis_Gewei; //显示个位
42 2 P2=1;
43 2 delay(300);
44 2 }
45 1
46 1 }
47 /******************************************************************/
48 /* 定时器中断函数 */
49 /******************************************************************/
50 void tim(void) interrupt 1 using 1
51 {
52 1 static unsigned char second=60,count; //初值99
53 1
54 1 TH0=0xd8;//重新赋值
55 1 TL0=0xf0;
C51 COMPILER V7.50 红绿灯 05/16/2010 11:36:31 PAGE 2
56 1 count++;
57 1 if (count==100)
58 1 {
59 2 count=0;
60 2 second--;//秒减1
61 2 if(second==0)
62 2 { //这里添加定时到0的代码 ,可以是灯电路,继电器吸合等,或者执行一个程序
63 3 if(red)
64 3 {
65 4 red=0;yellow=1;
66 4 second=5;
67 4 P1=0xF3;//黄灯亮5秒
68 4 }
69 3 else if(yellow && !turnred)
70 3 {
71 4 yellow=0;green=1;
72 4 second=50;
73 4 P1=0xCF;//绿灯亮50秒
74 4 }
75 3 else if(green)
76 3 {
77 4 yellow=1;green=0;
78 4 second=5;
79 4 P1=0xF3;//黄灯亮5秒
80 4 turnred=1;
81 4 }
82 3 else if(yellow && turnred)
83 3 {
84 4 red=1;yellow=0;
85 4 P1=0xFC;//红灯亮60秒
86 4 second=60;
87 4 turnred=0;
88 4 }
89 3
90 3 }
91 2 Dis_Shiwei=tab[second/10];//十位显示值处理
92 2 Dis_Gewei=tab[second%10]; //个位显示处理
93 2
94 2 }
95 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 191 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -