📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 01/23/2007 22:31:40 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***************************
2 **采用LCD显示时间
3 **使用T2的16位自动重装模式来精确计时
4 **clock:18.432M
5 ***************************/
6 #include "STC89C51RC.H"
7 #include "intrins.h"
8 #include "lcd.h"
9
10 sbit SW = P1^0;
11 sbit BMSW1 = P2^3;
12 sbit BMSW2 = P2^4;
13 sbit BMSW = P2^5;
14
15 #define FLASH_BYTE_READ 1
16 #define FLASH_BYTE_WRITE 2
17 #define FLASH_SECTOR_CLR 3
18 #define ISP_TRIG1 0x46
19 #define ISP_TRIG2 0xb9
20 #define ISP_EN_T 0x81//设置等待时间和ISP使能
21 #define FLASH_ADDR_SEC 0x2000//这是第1个扇区,每个扇区512字节,共有10个扇区
22 #define FLASH_ADDR_MIN 0x2200//这是第2个扇区
23 #define FLASH_ADDR_HOUR 0x2400//这是第3个扇区
24
25 struct time //定义一个存储时间结构
26 {
27 unsigned char hour,min,sec;
28 };
29 struct time curtime = {0,0,0};//用于存放当前时间
30 struct time disptime = {24,60,60};//用于存放显示时间,赋个不正确的值,上电时用来刷新显示
31 extern unsigned char pdata disp_buffer[15];
32 unsigned char delayNs;
33 unsigned char delayN33ms;
34
35
36 /***********************************************
37 功能:时钟计时中断
38 描述:定时器2的中断服务程序,每33ms重装一次定时器
39 18.432M晶振,30次中断为1秒
40 参数:无
41 返回:无
42 ***********************************************/
43 void timer2_int() interrupt 5 using 3
44 {
45 1 static unsigned char time2_count = 0;
46 1 TF2 = 0;//time2需要软件清除中断标志位
47 1 time2_count++;
48 1 delayN33ms--;
49 1 if(time2_count >= 30)
50 1 {
51 2 time2_count = 0;
52 2 delayNs--;
53 2 curtime.sec++;
54 2 }
55 1 if(curtime.sec >= 60)
C51 COMPILER V7.50 MAIN 01/23/2007 22:31:40 PAGE 2
56 1 {
57 2 curtime.sec = 0;
58 2 curtime.min++;
59 2 }
60 1 if(curtime.min >= 60)
61 1 {
62 2 curtime.min = 0;
63 2 curtime.hour++;
64 2 }
65 1 if(curtime.hour >= 24)curtime.hour = 0;
66 1 }
67
68 /***********************************************
69 功能:FLASH扇区擦除
70 描述:擦除1个扇区
71 参数:扇区地址
72 返回:无
73 ***********************************************/
74 void flash_clr(unsigned int sector_addr)
75 {
76 1 ISP_ADDRH = sector_addr >> 8;
77 1 ISP_ADDRL = sector_addr & 0x00ff;
78 1 ISP_CONTR = ISP_EN_T;
79 1 ISP_CMD = FLASH_SECTOR_CLR;
80 1 ISP_TRIG = 0x46;
81 1 ISP_TRIG = 0xb9;//0x46,0xb9是特定的触发信号
82 1 _nop_();
83 1 }
84
85
86 /***********************************************
87 功能:FLASH写
88 描述:写1个字节至FLASH
89 参数:地址,要写的1个字节数据
90 返回:无
91 ***********************************************/
92 void flash_write(unsigned int addr,unsigned char byte)
93 {
94 1 ISP_DATA = byte;
95 1 ISP_ADDRH = addr >> 8;
96 1 ISP_ADDRL = addr & 0x00ff;
97 1 ISP_CONTR = ISP_EN_T;
98 1 ISP_CMD = FLASH_BYTE_WRITE;
99 1 ISP_TRIG = 0x46;
100 1 ISP_TRIG = 0xb9;//0x46,0xb9是特定的触发信号
101 1 _nop_();
102 1 }
103
104 /***********************************************
105 功能:FLASH读
106 描述:读1个字节从FLASH
107 参数:地址
108 返回:读出的1个字节数据
109 ***********************************************/
110 unsigned char flash_read(unsigned int addr)
111 {
112 1 ISP_ADDRH = addr >> 8;
113 1 ISP_ADDRL = addr & 0x00ff;
114 1 ISP_CONTR = ISP_EN_T;
115 1 ISP_CMD = FLASH_BYTE_READ;
116 1 ISP_TRIG = 0x46;
117 1 ISP_TRIG = 0xb9;//0x46,0xb9是特定的触发信号
C51 COMPILER V7.50 MAIN 01/23/2007 22:31:40 PAGE 3
118 1 _nop_();
119 1 return(ISP_DATA);
120 1 }
121
122 /***********************************************
123 功能:主函数
124 描述:主函数
125 参数:无
126 返回:无
127 ***********************************************/
128 void main (void)
129 {
130 1 unsigned char i,j;
131 1 unsigned char stat = 0;
132 1 bit bmsw_temp,wink;
133 1 IE = 0xa0;//中断允许ET2
134 1 RCAP2H = 0x38;//自动重装数
135 1 RCAP2L = 0x00;//33MS中断一次
136 1 T2CON = 0x04;//T2工作在16位自动重装模式并开始计时
137 1
138 1 P0 = 0xff;
139 1 P1 = 0xff;
140 1 P2 = 0xff;
141 1 P3 = 0xff;
142 1
143 1 bmsw_temp = BMSW1;//
144 1 lcd_init();//LCD 初始化
145 1 // while(delay3s);
146 1 // write_char(1,37);//第一个字符全显
147 1 disp_buffer[0] = 0x12;//显示两处间隔秒点
148 1 lcd_update(0,1);
149 1 if(SW)//这样来控制上电时是否读FLASH
150 1 {
151 2 curtime.sec = flash_read(FLASH_ADDR_SEC);//读FLASH,
152 2 curtime.min = flash_read(FLASH_ADDR_MIN);//读FLASH,
153 2 curtime.hour = flash_read(FLASH_ADDR_HOUR);//读FLASH,
154 2 }
155 1 do//主循环
156 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -