?? 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 + -