📄 1.lst
字号:
C51 COMPILER V7.09 1 10/15/2008 14:42:40 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE 1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************/
2 /*
3 *文件名:1.c
4 *功能描述:单片机系统复位后等待数据的接收,单片机将接收到的数据在液晶上显示并从串口发送出去
5 *参数:波特率为19200,8位数据位,无校验位
6 *返回值:无
7 *作者:黄英杰
8 *单位:吉首大学
9 *时间:2008.9.27
10 */
11 /****************************************************/
12 #include"reg52.h"
13 #include"absacc.h"
14
15
16 #define A_LCDCODE XBYTE[0x4000]//定义给液晶写命令的绝对地址变量
17 #define A_LCDDATA XBYTE[0x4001]//定义给液晶写数据的绝对地址变量
18 #define Data_Len 8//接收数据长度
19
20
21 void Send_Data(void);//串口发送数据函数
22 void delay(unsigned int t);
23 void init_lcd(void);
24 void lcd_code(unsigned char lcdcode);
25 void lcd_data(unsigned char lcddata);
26 void display_char();
27
28
29 unsigned char idata Buffer[200];
30 unsigned char Count=0;//建立一数组存放接收到的数据,Count存储数据个数
31 bit Receive_flag=0;//接收完成标志位
32
33
34 void main(void)
35 {
36 1 init_lcd();//初始化液晶
37 1 T2CON=0x30;//T2作为波特率发生器
38 1 RCAP2H=0xff;
39 1 RCAP2L=0xec;//波特率为19200
40 1 ES=1;
41 1 EA=1;//开总中断,允许串口中断
42 1 SCON=0x50;// 串口工作方式为工作方式1,允许接收
43 1 PCON=0x00;
44 1 TI=0;
45 1 RI=0;
46 1 TR2=1;
47 1 while(1)
48 1 {
49 2 if(Receive_flag==1)
50 2 {
51 3 Receive_flag=0;
52 3 lcd_code(0x01);//清屏指令
53 3 lcd_code(0x80);
54 3 display_char();//将接收到的数据在液晶上显示
55 3 Send_Data();//将接收到的数据发送出去
C51 COMPILER V7.09 1 10/15/2008 14:42:40 PAGE 2
56 3 }
57 2 }
58 1 }
59
60
61 /*************************串口接收中断函数***********************/
62 void Receive_Data() interrupt 4 using 1
63 {
64 1 unsigned char num;
65 1 if(RI)//判断是接收还是发送引起的中断
66 1 {
67 2 RI=0;
68 2 num=SBUF;
69 2 Buffer[Count]=num;//将接收到的数据保存到数据缓冲区
70 2 Count++;
71 2 if(Count==Data_Len)
72 2 {
73 3 Receive_flag=1;//数据接收完成,置位标志位
74 3 }
75 2 }
76 1 }
77
78
79 /*************************串口发送数据函数***********************/
80 void Send_Data(void)
81 {
82 1 unsigned char j;
83 1 for(j=0;j<Count;j++)
84 1 {
85 2 SBUF=Buffer[j];//发送数据
86 2 while(!TI);//等待发送,若未发送完则等待
87 2 TI=0;
88 2 }
89 1 Count=0;
90 1 }
91
92
93 /*********************延时函数********************/
94 void delay(unsigned int t)
95 {
96 1 unsigned int i;
97 1 for(i=0;i<=t;i++);
98 1 }
99
100
101
102 /************向液晶写一个命令的函数***************/
103 void lcd_code(unsigned char lcdcode)
104 {
105 1 delay(3);
106 1 A_LCDCODE=lcdcode;
107 1 delay(200);
108 1 }
109
110
111
112 /**************向液晶写一个数据的函数*************/
113 void lcd_data(unsigned char lcddata)
114 {
115 1 delay(3);
116 1 A_LCDDATA=lcddata;
117 1 delay(60);
C51 COMPILER V7.09 1 10/15/2008 14:42:40 PAGE 3
118 1 }
119
120
121
122 /******************初始化液晶屏函数**************/
123 void init_lcd(void)
124 {
125 1 delay(1000);
126 1 lcd_code(0x38);//功能设定,5*7点阵,8位数据接口
127 1 delay(1000);
128 1 lcd_code(0x0c);//显示画面设置,开显示
129 1 delay(1000);
130 1 lcd_code(0x01);//清屏指令
131 1 delay(1000);
132 1 lcd_code(0x06);//当读或写一个字符后地址指针加1,且光标加1
133 1 delay(1000);
134 1 }
135
136
137
138 /***************显示接收字符数据的函数*******************/
139 void display_char()
140 {
141 1 unsigned char i=0;
142 1 while(i<Count)
143 1 {
144 2 lcd_data(Buffer[i]);
145 2 i++;
146 2 }
147 1 }
148
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 227 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = 200 ----
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 + -