📄 cs23-2.lst
字号:
C51 COMPILER V8.02 CS23_2 09/15/2008 16:50:43 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CS23_2
OBJECT MODULE PLACED IN CS23-2.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE CS23-2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REG51.H>
2 #include<math.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit CS1=P2^4;
6 sbit CS2=P2^3;
7 sbit RS=P2^7;
8 sbit RW=P2^6;
9 sbit EN=P2^5;
10 sbit RST=P2^2;
11 #define DataPort P0
12 /**********常用操作命令和参数定义***********/
13 #define DISPON 0x3f //显示屏开
14 #define DISPOFF 0x3e //显示屏关
15 #define DISPFIRST 0xc0 //起始行显示定义
16 #define SETX 0x40 //X定位(页)
17 #define SETY 0xb8 //Y定位(列)
18 #define Lcdbusy 0x80 //LCM忙判断定义
19 /***********************************************/
20 #define MODL 0x00 //左区
21 #define MODM 0x40 //左区与中区分界
22 //#define MODR 0x80 //中区与右区分界
23 #define LCMLIMIT 0x80 //中区的边界
24 //#define LCMLIMIT 0xc0 //右区的边界(这里不用)
25 /*************************************************/
26 uchar col,row,cbyte; //列、行、数据的变量定义
27 bit xy; //画线标志,"1"水平线,"0"垂直线。
28 /**************************************************/
29 void Lcminit(void); //液晶模块初始化子函数
30 void Delay(unsigned long MS); //延时子函数
31 void lcdbusyL(void); //左区判忙子函数
32 void lcdbusyM(void); //中区判忙子函数
33 //void lcdbusyR(void); //右区判忙子函数(这里不用)
34 void Wrdata(uchar X); //写数据至LCM
35 void Lcmcls(void); //LCM清屏
36 void Lcmclsxx(void); //LCM全屏置黑
37 void wtcom(void); //公用判忙等待子函数
38 void Locatexy(void); //光标定义
39 void WrcmdL(uchar X); //写命令至左区
40 void WrcmdM(uchar X); //写命令至中区
41 //void WrcmdR(uchar X); //写命令至右区(这里不用)
42 void Rddata(void); //读LCM状态子函数
43 void Linehv(uchar length); //水平、垂直画线子函数
44 void point(void); //画点子函数
45 void Linexy(uchar endx, uchar endy); //画斜线子函数
46 /************************复位子函数*************************/
47 void reset() //复位子函数
48 { //复位子函数开始
49 1 RST=0; //复位端置0
50 1 Delay(20); //延时20ms
51 1 RST=1; //复位端置1
52 1 Delay(20); //延时20ms
53 1 } //复位子函数结束
54 /*********************主函数**********************/
55 void main(void)
C51 COMPILER V8.02 CS23_2 09/15/2008 16:50:43 PAGE 2
56 { //主函数开始
57 1 col=0; //定位0列、0页
58 1 row=0;
59 1 Delay(10); //延时一会
60 1 Lcminit(); //液晶模块初始化
61 1 Delay(1000); //延时一会
62 1 /***********以下使用画直线与斜线的方法,画出一条小舢舨*********/
63 1 /****************先画出船上建筑**************/
64 1 col=0; //定位x方位0、y方位32
65 1 row=32;
66 1 xy=1; //水平线
67 1 Linehv(127); //画线,长度127
68 1 /*----------------------------------------------*/
69 1 col=33; //定位x方位33、y方位48
70 1 row=48;
71 1 xy=1; //水平线
72 1 Linehv(30); //画线,长度30
73 1 col=36; //定位x方位36、y方位32
74 1 row=32;
75 1 xy=0; //垂直线
76 1 Linehv(16); //画线,长度16
77 1 col=64; //定位x方位64、y方位48
78 1 row=48;
79 1 xy=1; //水平线
80 1 Linehv(30); //画线,长度30
81 1 col=91; //定位x方位91、y方位32
82 1 row=32;
83 1 xy=0; //垂直线
84 1 Linehv(16); //画线,长度16
85 1 /*------------------------------------------------*/
86 1 col=10; //定位x方位10、y方位32
87 1 row=32;
88 1 xy=0; //垂直线
89 1 Linehv(27); //画线,长度27
90 1 /************以下画出船底的弧形***********/
91 1 col=0; //定位x方位0、y方位32
92 1 row=32;
93 1 Linexy(10,16); //画斜线,终点为x方位10、y方位16
94 1 col=10; //定位x方位10、y方位16
95 1 row=16;
96 1 Linexy(30,8); //画斜线,终点为x方位30、y方位8
97 1 col=30; //定位x方位30、y方位8
98 1 row=8;
99 1 Linexy(64,5); //画斜线,终点为x方位64、y方位5
100 1 /*-----------------------------------------------------------------*/
101 1 col=65; //定位x方位65、y方位5
102 1 row=5;
103 1 Linexy(97,8); //画斜线,终点为x方位97、y方位8
104 1 col=97; //定位x方位97、y方位8
105 1 row=8;
106 1 Linexy(117,16); //画斜线,终点为x方位117、y方位16
107 1 col=117; //定位x方位117、y方位16
108 1 row=16;
109 1 Linexy(127,32); //画斜线,终点为x方位127、y方位32
110 1 /*----------------------------------画舢舨结束------------------------------------*/
111 1 while(1); //死循环
112 1
113 1 } //主函数结束
114 /*************************画斜线子函数************************/
115 void Linexy(uchar endx, uchar endy)
116 {
117 1 register uchar t;
C51 COMPILER V8.02 CS23_2 09/15/2008 16:50:43 PAGE 3
118 1 char xerr=0,yerr=0,delta_x,delta_y,distance;
119 1 uchar incx,incy;
120 1 delta_x=endx-col;
121 1 delta_y=endy-row;
122 1 if(delta_x>0)incx=1;
123 1 else if(delta_x==0)incx=0;
124 1 else incx=-1;
125 1 if(delta_y>0)incy=1;
126 1 else if(delta_y==0)incy=0;
127 1 else incy=-1;
128 1 delta_x=cabs(delta_x);
129 1 delta_y=cabs(delta_y);
130 1 if(delta_x>delta_y) distance=delta_x;
131 1 else distance=delta_y;
132 1 /*-----------开始画线-------------*/
133 1 for(t=0;t<=distance+1;t++){
134 2 point();
135 2 xerr+=delta_x;
136 2 yerr+=delta_y;
137 2 if(xerr>distance){
138 3 xerr-=distance;
139 3 col+=incx;
140 3 }
141 2 if(yerr>distance){
142 3 yerr-=distance;
143 3 row+=incy;
144 3 }
145 2 }
146 1 }
147 /*********************画水平、垂直线子函数***********************/
148 void Linehv(uchar length) /*函数名为Linehv的画水平、垂直线子函数,定义
149 length 为线段长度的无符号字符型变量。*/
150 { //画水平、垂直线子函数开始
151 1 uchar xs,ys; //定义xs、ys 为无符号字符型变量。
152 1
153 1 if(xy){ys=col; //若xy为1,则为水平划线
154 2 for(xs=0;xs<length;xs++){
155 3 col=ys+xs;
156 3 point();}
157 2 }
158 1 else {xs=row; //否则为垂直划线
159 2 for(ys=0;ys<length;ys++)
160 2 {
161 3 row=xs+ys;
162 3 point();}
163 2 }
164 1 } //画水平、垂直线子函数结束
165 /**********************画点子函数***************************/
166 void point(void) //画点子函数
167 { //画点子函数开始
168 1 uchar x1,y1,x,y; //定义x1、y1、x、y 为无符号字符型变量
169 1 x1=col; //x方向座标col赋予x1(暂存)
170 1 y1=row; //y方向座标row赋予y1(暂存)
171 1 row=y1>>3; //y1右移3位后赋予row,获得y方向的页地址
172 1 Rddata(); //读取列(x)地址、页(y)地址处的数据
173 1 y=y1&0x07; //计算出该页(1字节)内的y轴点位置地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -