?? 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 + -