📄 sec2.lst
字号:
C51 COMPILER V7.06 SEC2 11/23/2005 08:52:24 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SEC2
OBJECT MODULE PLACED IN sec2.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE sec2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /**************************************************
2 ; 平凡单片机工作室
3 ; http://www.mcustudio.com
4 ; (c) Copyright 2003 Pingfan's McuStudio
5 ; All rights Reserved
6 ;sec2.c
7 ;作者:周坚
8 ;功能描述:
9 ;带键盘设置的秒计时器
10 ;功能:倒计时的秒计时器,从59倒计到0,然后又从59开始倒计到0;
11 ;各个键的功能
12 ;S1:开始运行
13 ;S2:停止运行
14 ;S3:高位加1,按一次,数码管的十位加1,从0-5循环变化
15 ;S4:低位加1,按一次,数码管的个位加1,从0-9循环变化
16 ;本例可用ledkey.dll实验仿真板验证
17 ;如使用DSB-1A型实验板,将提供相应的程序
18 **************************************************/
19 #include "reg51.h"
20 #define uchar unsigned char
21 #define uint unsigned int
22
23 #define Hidden 0x10; //消隐字符在字形码表中的位置
24 uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};
25 uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF
-};
26 uchar DispBuf[6]; //6字节的显示缓冲区
27 bit Sec; //1s到的标记
28 uchar SecVal; //秒计数值
29 bit KeyOk;
30 bit StartRun;
31 uchar SetSecVal; //秒的预置值
32
33 uchar code TH0Val=63266/256;
34 uchar code TL0Val=63266%256;//当晶振为11.0592时,定时2.5ms的定时器初值
35 //经过精确调整,在值为63266时,定时时间为1.00043362s
36
37 void Timer0() interrupt 1
38 { uchar tmp;
39 1 static uchar dCount; //计数器,显示程序通过它得知现正显示哪个数码管
40 1 static uint Count; //秒计数器
41 1 const uint CountNum=100; //预置值(正确值为400)
42 1 TH0=TH0Val;
43 1 TL0=TL0Val;
44 1 tmp=BitTab[dCount]; //根据当前的计数值取位值
45 1 P2=P2|0xfc; //P2与11111100B相或,将高6位置1
46 1 P2=P2&tmp; //P2与取出的位值相与,将某一位清零
47 1 tmp=DispBuf[dCount]; //根据当前的计数值取显示缓冲待显示值
48 1 tmp=DispTab[tmp]; //取字形码
49 1 P0=tmp; //送出字形码
50 1 dCount++; //计数值加1
51 1 if(dCount==6) //如果计数值等于6,则让其回0
52 1 dCount=0;
53 1 //以下是秒计数的程序行
54 1 Count++; //计数器加1
C51 COMPILER V7.06 SEC2 11/23/2005 08:52:24 PAGE 2
55 1 if(Count>=CountNum) //到达预计数值
56 1 { Count=0; //清零
57 2 if(StartRun) //要求运行
58 2 { if((SecVal--)==0)
59 3 SecVal=SetSecVal; //减到0后重置初值
60 3 }
61 2 }
62 1 }
63 /*延时程序
64 由Delay参数确定延迟时间
65 */
66 void mDelay(unsigned int Delay)
67 { unsigned int i;
68 1 for(;Delay>0;Delay--)
69 1 { for(i=0;i<124;i++)
70 2 {;}
71 2 }
72 1 }
73
74 void KeyProc(uchar KValue) //键值处理
75 { if((KValue&0x04)==0) //Start
76 1 StartRun=1;
77 1 if((KValue&0x08)==0) //Stop
78 1 StartRun=0;
79 1 if((KValue&0x10)==0)
80 1 { StartRun=0; //停止运行
81 2 DispBuf[4]++;
82 2 if(DispBuf[4]>=6) //次高位由0加到5
83 2 DispBuf[4]=0;
84 2 SetSecVal=DispBuf[4]*10+DispBuf[5]; //计算出设置值
85 2 SecVal=SetSecVal;
86 2 }
87 1 if((KValue&0x20)==0)
88 1 { StartRun=0; //停止运行
89 2 DispBuf[5]++;
90 2 if(DispBuf[5]>=10) //末位由0加到9
91 2 DispBuf[5]=0;
92 2 SetSecVal=DispBuf[4]*10+DispBuf[5]; //计算出设置值
93 2 SecVal=SetSecVal;
94 2 }
95 1 }
96 uchar Key()
97 { uchar KValue;
98 1 uchar tmp;
99 1 P3|=0x3c; //将P3口的接键盘的中间四位置1
100 1 KValue=P3;
101 1 KValue|=0xc3; //将未接键的4位置1
102 1 if(KValue==0xff) //中间4位均为1,无键按下
103 1 return(0); //返回
104 1 mDelay(10); //延时10ms,去键抖
105 1 KValue=P3;
106 1 KValue|=0xc3; //将未接键的4位置1
107 1 if(KValue==0xff) //中间4位均为1,无键按下
108 1 return(0); //返回
109 1 //如尚未返回,说明一定有1或更多位被按下
110 1 for(;;)
111 1 { tmp=P3;
112 2 if((tmp|0xc3)==0xff)
113 2 break; //等待按键释放
114 2 }
115 1 return(KValue);
116 1 }
C51 COMPILER V7.06 SEC2 11/23/2005 08:52:24 PAGE 3
117 void Init()
118 { TMOD=0x01;
119 1 TH0=TH0Val;
120 1 TL0=TL0Val;
121 1 ET0=1; //开T0中断
122 1 EA=1; //开总中断
123 1 TR0=1; //T0开始运行
124 1 }
125 void main()
126 { uchar KeyVal;
127 1 uchar i;
128 1 Init(); //初始化
129 1 for(i=0;i<=4;i++)
130 1 DispBuf[i]=Hidden; //显示器前四位消隐
131 1 DispBuf[4]=SecVal/10;
132 1 DispBuf[5]=SecVal%10;
133 1 for(;;)
134 1 { KeyVal=Key();
135 2 if(KeyVal)
136 2 KeyProc(KeyVal);
137 2 DispBuf[4]=SecVal/10;
138 2 DispBuf[5]=SecVal%10;
139 2 }
140 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 347 ----
CONSTANT SIZE = 25 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -