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