📄 mdp.lst
字号:
C51 COMPILER V8.06 MDP 03/03/2009 22:18:33 PAGE 1
C51 COMPILER V8.06, COMPILATION OF MODULE MDP
OBJECT MODULE PLACED IN mdp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE mdp.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************************************/
2 /*显示模块的应用,LCD12864并行接法画波形程序
3 /*LCD12864点阵高电平亮,低电平暗
4 /*LCD12864在X轴方向分有上下各8个区(一个屏幕上共有16个区)
5 /*上半部分有00~07区;下半部分有08~0F区
6 /*每个区X轴向上有16个点阵;Y轴向上有32个点阵
7 /*LCD12864写点阵每个区都是先对前面的8个点阵进行操作,再对后8个点阵操作
8 /* 创作时间 2008.7.31
9 /************************************************************************/
10 #include<reg52.h>
11 #include<intrins.h>
12 #include<math.h> //调用sin()函数
13 #define uint unsigned int
14 #define uchar unsigned char
15 /************变量定义**************/
16 uint i,j;
17 uchar temp,x,y;
18
19
20 /********* LCD12864边线图***********/
21 sbit RS=P2^5; //数据\命令选择
22 sbit RW=P2^6; //读\写选择
23 sbit E=P2^7; //使能
24 /*************************/
25 /* 延迟子函数
26 /*************************/
27 void delay(uint ms)
28 {
29 1 for(i=0;i<ms;i++)
30 1 for(j=0;j<110;j++);
31 1 }
32 /********************************/
33 /* LCD12864子函数
34 /********************************/
35 //============LCDbegin==========/
36 /*******检查LCD忙位********/
37 void check_busy()
38 {
39 1 RS=0; //命令选择
40 1 RW=1;
41 1 E=1;
42 1 P0=0xff;
43 1 while((P0&0x80)==0x80); //确定读忙标志位BF为0
44 1 E=0;
45 1 }
46 /********LCD写命令子函数*********/
47 void write_com(uchar com)
48 {
49 1 check_busy(); //检忙
50 1 RS=0;
51 1 RW=0;
52 1 E=1;
53 1 P0=com;
54 1 delay(2);
55 1 E=0;
C51 COMPILER V8.06 MDP 03/03/2009 22:18:33 PAGE 2
56 1 delay(2);
57 1 }
58 /**********LCD写数据子函数**********/
59 void write_data(uchar dat)
60 {
61 1 check_busy();
62 1 RS=1;
63 1 RW=0;
64 1 E=1;
65 1 P0=dat;
66 1 delay(2);
67 1 E=0;
68 1 delay(2);
69 1 }
70 /********LCD写字符串子函数**********/
71 void write_str(uchar add,uchar *str)
72 {
73 1 write_com(add);
74 1 while(*str!='\0')
75 1 {
76 2 write_data(*str++);
77 2 delay(2);
78 2 }
79 1 }
80 /********LCD初始化子函数********/
81 void init_LCD()
82 {
83 1 write_com(0x30); //选择基本指令集 选择8bit数据流
84 1 write_com(0x02); //地址归位
85 1 write_com(0x0c); //开显示(无游标、不反白)
86 1 write_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
87 1 write_com(0x01); //清除显示,并且设定地址指针为00H
88 1 delay(5);
89 1 }
90
91 /**************显示坐标(x-y轴)*******************/
92 void display_XY_line()
93 {
94 1 for(x=0;x<16;x++) //16个区
95 1 for(y=0;y<32;y++) //每个区有32行
96 1 {
97 2 if(x<8&&y==31) //在前八个区的第32行画一条横线---x轴
98 2 {
99 3 write_com(0x36); //扩充指令集,开绘图功能
100 3 write_com(0x80+y); //行地址
101 3 write_com(0x80+x); //列地址
102 3 write_com(0x30); //改变“RE”位元,基本指令集,以下为写数据
103 3 //连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写
104 3 write_data(0xff); //前8个点
105 3 write_data(0xff); //后8个点
106 3 }
107 2
108 2
109 2 else if(x==0||x==8) //在第零和第八区画一条竖线---y轴
110 2 {
111 3 write_com(0x36); //扩充指令集,开绘图功能
112 3 write_com(0x80+y); //行地址
113 3 write_com(0x80+x); //列地址
114 3 write_com(0x30); //改变“RE”位元,基本指令集,以下为写数据
115 3 //连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写
116 3 write_data(0x80); //前8个点
117 3 write_data(0x00); //后8个点
C51 COMPILER V8.06 MDP 03/03/2009 22:18:33 PAGE 3
118 3 }
119 2
120 2
121 2 else //在除去x轴和y轴的其它个位置写0(即无显示)
122 2 {
123 3 write_com(0x36); //扩充指令集,开绘图功能
124 3 write_com(0x80+y); //行地址
125 3 write_com(0x80+x); //列地址
126 3 write_com(0x30); //改变“RE”位元,基本指令集
127 3 //连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写
128 3 write_data(0x00); //前8个点
129 3 write_data(0x00); //后8个点
130 3 }
131 2 }
132 1 write_com(0x34); //扩充指令,关绘图功能
133 1 write_com(0x36); //扩充指令,开绘图功能
134 1 }
135
136
137 void display_fangbo_line()
138 {
139 1 for(x=0;x<16;x++) //16个区
140 1 for(y=0;y<32;y++) //每个区有32行
141 1 {
142 2 if(x<8&&y==31)
143 2 {
144 3 write_com(0x36); //扩充指令集,开绘图功能
145 3 write_com(0x80+y); //行地址
146 3 write_com(0x80+x); //列地址
147 3 write_com(0x30); //改变“RE”位元,基本指令集,以下为写数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -