sec.lst
来自「单片及c语言轻松入门的随书光盘」· LST 代码 · 共 110 行
LST
110 行
C51 COMPILER V7.06 SEC 11/02/2005 10:01:12 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SEC
OBJECT MODULE PLACED IN sec.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE sec.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 ;sec.c
7 ;作者:周坚
8 ;秒钟程序,每到1S,显示值加1,有高位0消隐功能
9 ;本例可用dpj.dll实验仿真板验证
10 ;**************************************************/
11
12 #include "reg51.h"
13 #define uchar unsigned char
14 #define uint unsigned int
15
16 #define Hidden 0x10; //消隐字符在字形码表中的位置
17 uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};
18 uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF
-};
19 uchar DispBuf[6]; //6字节的显示缓冲区
20 bit Sec; //1s到的标记
21 uchar SecValue; //秒计数值
22
23 uchar code TH0Val=63266/256;
24 uchar code TL0Val=63266%256;//当晶振为11.0592时,定时2.5ms的定时器初值
25 //经过精确调整,在值为63266时,定时时间为1.00043362s
26
27 void Timer0() interrupt 1
28 { uchar tmp;
29 1 static uchar dCount; //计数器,显示程序通过它得知现正显示哪个数码管
30 1 static uint Count; //秒计数器
31 1 const uint CountNum=400; //预置值
32 1 TH0=TH0Val;
33 1 TL0=TL0Val;
34 1 tmp=BitTab[dCount]; //根据当前的计数值取位值
35 1 P2=P2|0xfc; //P2与11111100B相或,将高6位置1
36 1 P2=P2&tmp; //P2与取出的位值相与,将某一位清零
37 1 tmp=DispBuf[dCount]; //根据当前的计数值取显示缓冲待显示值
38 1 tmp=DispTab[tmp]; //取字形码
39 1 P0=tmp; //送出字形码
40 1 dCount++; //计数值加1
41 1 if(dCount==6) //如果计数值等于6,则让其回0
42 1 dCount=0;
43 1 //以下是秒计数的程序行
44 1 Count++; //计数器加1
45 1 if(Count>=CountNum) //到达预计数值
46 1 { Count=0; //清零
47 2 Sec=1; //置位1s到标志
48 2 SecValue++; //秒值加1
49 2 if(SecValue>=60)
50 2 SecValue=0; //秒从0计到59
51 2 }
52 1 }
53
54 void Init()
C51 COMPILER V7.06 SEC 11/02/2005 10:01:12 PAGE 2
55 { TMOD=0x01;
56 1 TH0=TH0Val;
57 1 TL0=TL0Val;
58 1 ET0=1; //开T0中断
59 1 EA=1; //开总中断
60 1 TR0=1; //T0开始运行
61 1 }
62 void main()
63 { uchar i;
64 1 Init(); //初始化
65 1 for(i=0;i<=4;i++)
66 1 DispBuf[i]=Hidden; //显示器前四位消隐
67 1 DispBuf[4]=SecValue/10;
68 1 DispBuf[5]=SecValue%10;
69 1 for(;;)
70 1 {
71 2 if(Sec) //1s时间到
72 2 { DispBuf[4]=SecValue/10;
73 3 DispBuf[5]=SecValue%10;
74 3 if(DispBuf[4]==0)
75 3 DispBuf[4]=Hidden; //高位0消隐
76 3 Sec=0; //清除1秒到的标志
77 3 }
78 2 }
79 1 }
80
81
82
83
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 202 ----
CONSTANT SIZE = 25 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?