📄 课设4刘.lst
字号:
C51 COMPILER V7.50 课设4羅 07/02/2006 15:45:51 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 课设4羅
OBJECT MODULE PLACED IN 课设4刘.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 课设4刘.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #define uchar unsigned char
3 uchar cout, k;//计数标志。
4 unsigned int cout_j;
5 uchar miao = 0; //时间初始化
6 uchar fen = 0;
7 uchar hour = 10;
8 uchar i,key,n=0;
9 sbit P3_0=P3^0;
10 sbit P3_1=P3^1;
11 sbit P3_2=P3^2;
12 sbit P3_4=P3^4;
13 sbit P2_7=P2^7;
14 bit flag_60,flag_11,flag_10,flag_ma,flag_c;//超过60分报警标志
15 uchar code duanma[10] ={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
16 uchar code weima[6] ={ 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf};
17 uchar room[9][3],huanchun[6];
18 void delay(uchar i,uchar k)//延时程序采用将要显示的数据不断地读入huanchun数组中
19 {
20 1 do{ if(flag_ma==0)
21 2 { huanchun[0] = miao % 10;
22 3 huanchun[1] = miao / 10;
23 3 huanchun[2] = fen % 10;
24 3 huanchun[3] = fen / 10;
25 3 huanchun[4] = hour % 10;
26 3 huanchun[5] = hour / 10;
27 3 }
28 2 else
29 2 { huanchun[0] = room[k][0] % 10;
30 3 huanchun[1] = room[k][0] / 10;
31 3 huanchun[2] = room[k][1]% 10;
32 3 huanchun[3] = room[k][1] / 10;
33 3 huanchun[4] = room[k][2] % 10;
34 3 huanchun[5] = room[k][2] / 10;
35 3 }
36 2 }while(i--);
37 1 }
38 baocun(uchar i) //保存当前时刻时间数据
39 { room[i][0]=miao;
40 1 room[i][1]=fen;
41 1 room[i][2]=hour;
42 1 }
43 void dingshi()interrupt 1 //定时50ms
44 {
45 1 TH0 = 0x4c;//初始设置
46 1 TL0 = 0x00;
47 1 cout++;
48 1 P3_4=0; //外部中断启动报警
49 1 if (cout==2) // 以秒为单位
50 1 { flag_c=~flag_c; //10min时灯闪的频率定为2秒
51 2 miao++;
52 2 cout = 0;
53 2 cout_j++;//计数标志。
54 2 if (miao==60)
55 2 {
C51 COMPILER V7.50 课设4羅 07/02/2006 15:45:51 PAGE 2
56 3 miao = 0;
57 3 fen++;
58 3 if (fen==60)
59 3 {
60 4 fen = 0;
61 4 hour++;
62 4 if (hour==24)hour = 0;
63 4 }
64 3 }
65 2 if(cout_j==600)flag_10=1;//10MIN标志,
66 2 if(cout_j==660)flag_11=1; //11分标志,
67 2 if(cout_j==3600){flag_60=1;baocun(n);n++;}
68 2 //报警开,记录当前时刻,存储单元指向下一个以便下次报警记录时间
69 2 }
70 1 }
71 void xianshi()interrupt 3 //中断显示
72 {
73 1 TH1=0Xf8; //显示定时两毫秒。
74 1 TL1=0Xcc;
75 1 P1 = weima[i];
76 1 P2 = duanma[huanchun[i]];
77 1 i++;
78 1 if((i==3||i==5)&&flag_ma==0)P2_7=flag_c;
79 1 if(i==6)i=0;
80 1 }//该中断显示huanchun中的数据
81 unsigned char scankey()//键盘扫描以坐标形式取键值
82 {
83 1 unsigned char k,down,up;
84 1 P0=0xF0;
85 1 k=P0;
86 1 if(k==0xF0)return 0xFF;//确定列
87 1 delay(100,key); ////////////
88 1 down=3;
89 1 while(k&0x80)down--,k<<=1;
90 1 P0=0x0F;
91 1 k=P0;
92 1 if(k==0x0F)return 0xFF;//确定行
93 1 up=0;
94 1 while(k&0x01)up+=4,k>>=1;
95 1 return up+down;///行值加键值=坐标值
96 1 }//scankey
97 jianpan(uchar i)//键盘功能处理
98 { switch(i)
99 1 {
100 2 case 8:
101 2 case 9:
102 2 case 10:
103 2 case 11:
104 2 case 12:
105 2 case 13:break;
106 2 case 14:key=8;//该键按下后将记录的次数读入room中
107 2 room[8][0]=n;
108 2 room[8][1]=0;
109 2 room[8][2]=0;
110 2 flag_ma=~flag_ma;//显示时钟(时,分,秒)或显示记录次数
111 2 break;//跳出switch
112 2 case 15:flag_11=0;//复位,清计数,定时
113 2 flag_10=0;
114 2 flag_60=0;
115 2 cout_j=0;
116 2 P3_0=1;
117 2 P3_1=1;
C51 COMPILER V7.50 课设4羅 07/02/2006 15:45:51 PAGE 3
118 2 P3_2=1;
119 2 break; //跳出switch
120 2 default:key=k;flag_ma=~flag_ma; //显示时钟(时,分,秒)或显示记录的时间
121 2 }
122 1 }
123 void shortb()interrupt 2 //定时中断显示
124 { P3_4=1; //清除外部定时标志以便下次中断
125 1 if(flag_10==1){P3_2=flag_c;}//如果计时至十分钟,p3.2将会输出2hz频率的方波直到flag_10被清0
126 1 if(flag_11==1){P3_0=~P3_0;P3_2=~P3_2;flag_10=0;}//11min灯1s闪烁
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -