📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 07/25/2008 14:45:03 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"at89x52.h"
2 #include<intrins.h>
3 #include"def.h"
4
5
6
7
8 //************************************************
9 extern bit scan(void);
10 extern void tserial(void);
11 extern void tsled(void);
12 extern void S_RL(void);
13 extern void S_RR(void);
14 extern void clear(void);
15 extern void xch(void);
16
17 void delay (unsigned int value) /*延时副程式*/
18 {
19 1 while (value!=0) value--; /*10US延时*/
20 1 }
21 //***************************************************************************
22 void main()
23 {
24 1
25 1 T2CON=0x38; /*定时器2工作控制寄存器T2CON_________________*/
26 1 /*| TF2|EXF2|RCLK|TCLK|EXEN2|TR2|C/T2|CP/RL2|*/
27 1 /*|___________________|_____________________|*/
28 1 TL2=0xfd; /* X=2^16-fosc/(2*16*波特率) */
29 1 TH2=0xff; /* TL2=X&0x00ff */
30 1 RCAP2L=0xdc; /* TL2=X&0xff00 */
31 1 RCAP2H=0xff; /*设定传输波特率9600,晶体振荡器=11.059Mhz */
32 1 //TH2=256-(28800/9600);
33 1 TR2=1; /*启动TEMER2*/
34 1 SCON=0x50; /*设定UART工作在MODE2模式,可传送和接收数据 REN=1*/
35 1 /*串列控制寄存器SCON_______________________*/
36 1 /*| 7 6 5 4 | 3 2 1 0 |*/
37 1 /*| SM0| SM1| SM2| REN| TB8| RB8| TI | RI |*/
38 1 /*|___________________|___________________|*/
39 1 IE=0x98; /*8是允许中断,a是TIMER0,TIMER1中断致能位*/
40 1 /*| 7 6 5 4 | 3 2 1 0 |*/
41 1 /*| EA | | ET2| ES | ET1| EX1| ET0| EX0|*/
42 1 /*|___________________|___________________|*/
43 1 IP=0x10; /*中断优先级寄存器IP_______________________*/
44 1 /*| | | PT2| PS | PT1| PX1| PT0| PX0|*/
45 1 /*|___________________|___________________|*/
46 1 dispbuf[0]=dot; /*小数点位*/
47 1 dispbuf[7]=0x01; /*ID号码*/
48 1 dispbuf[8]=0x01; /*蜂鸣器设定开/二次分频*/
49 1 P0=0xff;
50 1 tsled();
51 1 while(1)
52 1 {
53 2 k=scan(); /*键盘扫描副程式*/
54 2 if(k==1)
55 2 {
C51 COMPILER V8.05a MAIN 07/25/2008 14:45:03 PAGE 2
56 3 switch(tab[ptr]) /*是则测试ptr键盘扫描计数器指标至TAB[]取到的键盘码*/
57 3 {
58 4
59 4
60 4 case 0x0c:
61 4 while(m==P1); /*按钮放开否?*/
62 4 S_RL(); //光标左移
63 4 break;
64 4 case 0x0d: /*光标右移*/
65 4 while(m==P1); /*按钮放开否?*/
66 4 S_RR(); //光标右移
67 4 break; /*跳出此循环*/
68 4 case 0x0a:
69 4 clear(); /*LED清除显示器CLEAR*/
70 4 while(m==P1); /*按钮放开否?*/
71 4 break; /*跳出此循环*/
72 4 case 0x0b:
73 4 while(m==P1); /*按钮放开否?*/
74 4 if(++dot>6)dot=0; //小数点左移
75 4 break; /*跳出此循环*/
76 4 case 0x0e: /*E被按下发送显示器上的数字*/
77 4 while(m==P1); /*按钮放开否?*/
78 4 tserial();
79 4 break; /*跳出此循环*/
80 4 case 0x0f:
81 4 while(m==P1); /*按钮放开否?*/
82 4 break; /*跳出此循环*/
83 4 default:
84 4 if(disp_temp[0]==0)
85 4 xch(); /*以上均不是则为数字键呼叫XCH作右键滚入*/
86 4 else
87 4 {
88 5 dispbuf[disp_temp[0]]=tab[ptr];
89 5 disp_temp[0]=0;
90 5 }
91 4 break; /*跳出此循环*/
92 4 } /*跳出SWITCH*/
93 3 delay(100); /*按钮抗机械反弹跳*/
94 3 while(m==P1); /*按钮放开否?*/
95 3 dispbuf[0]=dot; //显示小数点。
96 3 tsled(); /*串行发送到DTLED-6副程式*/
97 3 }
98 2 }
99 1 }
100
101
102
103
104
105 /******************************************************************
106 /*宣告串口serial发送副程式*/
107 /**************************************************************/
108 void tserial(void)
109 { uchar i=7;
110 1 IE=0x8f;
111 1 {while(i>1)
112 2 {
113 3 i--;
114 3 SBUF=dispbuf[i]; /*将LED上人数字以BCD码的形式由SBUF发送出去*/
115 3 while(TI!=1); /*发送完成否?*/
116 3 TI=0; /*是,则清除发送完成旗标TI=0*/
117 3 delay(10);
C51 COMPILER V8.05a MAIN 07/25/2008 14:45:03 PAGE 3
118 3 }
119 2 }
120 1 IE=0x9f;
121 1 }
122 //**************************************************************
123 /*串行口接收中断副程式*/
124 /******************************************************************/
125 void uartcom1_in1 () interrupt 4 using 1
126 { uchar v,i=0;
127 1 while(RI!=1); /*接收完成否*/
128 1 {
129 2 RI=0;
130 2 v=SBUF; /*接收的数据存入*/
131 2 dispbuf[6]=dispbuf[5];
132 2 dispbuf[5]=dispbuf[4];
133 2 dispbuf[4]=dispbuf[3];
134 2 dispbuf[3]=dispbuf[2];
135 2 dispbuf[2]=dispbuf[1];
136 2 dispbuf[1]=SBUF;
137 2 }
138 1 } /*返回主程式*/
139 /********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 274 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 2
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -