📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 11/17/2006 10:44:48 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*--------------------------------------------------------------------------------------------------------
-----
2 液晶模块OCM4X8C DB0-DB7连接至实验板DP0-DP7(4/8位并行接口方式)
3 E(sclk)连接至实验板DL7;
4 RS连接到DL6;
5 R/W(SID)固定接地;
6 外加一条连线:DK6,DK7接到VCC(+5V);
7 本程序功能:PC机通过串口向单片机传输数据,单片机经过处理后再送到液晶上显示
8 液晶能自动换行,汉字不能正常显示的位置自动补空,及无乱码显示(单字节于双字节字符混合)
9 实现方式:检测汉字前的字母(单字节)个数,若为奇数,字母后一位补以空字符,以后的字符全部往后退一个字符位
10
11 变量说明:
12 LCD_cn 字符写入地址或液晶要显示的数据
13 line 对应于液晶的显示行数,从的0行开始
14 3G1C embedded studio design
15 ----------------------------------------------------------------------------------------------------------
---*/
16 #include <reg52.h>
17 #include <absacc.h> //片外地址定义
18
19 #define uchar unsigned char
20
21 #define led_data XBYTE[0xe000] /*端口地址,对应实验板的DP0-DP7,数据*/
22 #define led_sel XBYTE[0xc000] /*端口地址,对应实验板的DL*/
23
24 void changeAddr(uchar lin); //地址转换子程序
25 void insert(uchar p); //插入空字符子程序
26 void changeArr(void); //数组调整子程序
27 void show(void); //液晶显示子程序
28 void wcom(void); //液晶写指令子程序
29 void wdat(void); //液晶写数据子程序
30 void delayms(uchar ms); //ms级延时子程序
31 void init(void); //初始化子程序
32 void init_serial(void);
33
34 uchar LCD_cn;
35 uchar data buffer[100]; //直接访问的内部数据存储器,访问速度最快
36 uchar i=0;
37 uchar k;
38 uchar flag;
39 sbit LED=P1^0;
40 /*---------------------------------------------------------------------------------------------
41 主函数
42 ---------------------------------------------------------------------------------------------*/
43 main(void)
44 {
45 1 init(); //液晶模块初始化
46 1 init_serial();
47 1
48 1 led_data=0;
49 1 led_sel=0xff;
50 1
51 1 TR1=1;
52 1
53 1
C51 COMPILER V7.06 MAIN 11/17/2006 10:44:48 PAGE 2
54 1
55 1 while(1)
56 1 {
57 2 if(flag==1)
58 2 {
59 3 flag=0;
60 3 LCD_cn=0x01; //清除显示
61 3 wcom();
62 3 delayms(2);
63 3 changeArr(); //调用字符数组排列子程序
64 3 LED=0;
65 3 show(); //调用液晶显示子程序
66 3 }
67 2 }
68 1
69 1 }
70 /*-----------------------------------------------------------------------------------------------
71 液晶初始化子程序
72 -----------------------------------------------------------------------------------------------*/
73 void init(void)
74 {
75 1 LCD_cn=0x30; //功能设定
76 1 wcom();
77 1 //delayms(2);
78 1
79 1 LCD_cn=0x01; //清除显示
80 1 wcom();
81 1 //delayms(2);
82 1
83 1 LCD_cn=0x06; //光标右移
84 1 wcom();
85 1 //delayms(2);
86 1
87 1 LCD_cn=0x0c; //开显示器
88 1 wcom();
89 1 //delayms(2);
90 1
91 1 LCD_cn=0x01; //清除显示
92 1 wcom();
93 1 //delayms(2);
94 1
95 1 }
96 /*----------------------------------------------------------------------------------------------
97 延时子程序
98 确保上一指令/数据已经接受、处理完。
99 ----------------------------------------------------------------------------------------------*/
100 void delayms(uchar ms)
101 {
102 1 uchar i;
103 1 while(ms--)
104 1 {
105 2 for(i=0; i<125; i++);
106 2 }
107 1 }
108 /*----------------------------------------------------------------------------------------------
109 串口初始化
110 ----------------------------------------------------------------------------------------------*/
111 void init_serial(void)
112 {
113 1 TMOD=0x20; //设置波特率9600bps
114 1 TL1=0xfd;
115 1 TH1=0xfd;
C51 COMPILER V7.06 MAIN 11/17/2006 10:44:48 PAGE 3
116 1 SCON=0x50;
117 1
118 1 EA=1;
119 1 ES=1;
120 1 }
121
122
123 /*----------------------------------------------------------------------------------------------
124 液晶写指令子程序
125 ----------------------------------------------------------------------------------------------*/
126 void wcom(void) //写指令
127 {
128 1 led_sel=0xbf; //RW=0,RS=0,E=1 指令写
129 1 //delayms(2);
130 1 led_data=LCD_cn;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -