📄 drawing_line.lst
字号:
C51 COMPILER V7.50 DRAWING_LINE 03/31/2008 16:29:42 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DRAWING_LINE
OBJECT MODULE PLACED IN drawing_line.OBJ
COMPILER INVOKED BY: E:\p-g\keil\C51\BIN\C51.EXE drawing_line.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3 #include"reg51.h"
4 #include<at0.h>
5 #include<math.h>
6 #define Graphic_Clear 0x01 //檫除点
7 #define Graphic_Not 0x02 //反相点
8 #define Graphic_Draw 0x03 //画点
9
10 uchar j=0,i=0;
11 uchar r=32;
12 /***********************在LCD上任意坐标画点********************************/
13
14 void DrawPoint(uchar X,uchar Y,uchar Type)
15 { //X,Y化点的坐标Type画点的类型:反相点,檫除点,画点
16 1
17 1 uchar DX = (Y >> 3); //计算出属于哪个字节
18 1 uchar BX = Y - (DX << 3); //计算出属于字节哪一位
19 1 uchar TempData = 0;
20 1
21 1
22 1 if (X > 63)
23 1 {
24 2 chip_select=2;
25 2 X -= 64;
26 2 }
27 1 else
28 1 {
29 2 chip_select=1;
30 2 }
31 1
32 1 SetPage(DX); //设行地址
33 1 SetColumn(X); //设列地址
34 1
35 1 TempData = ReadData(); //读出所画点所在字节的内容
36 1
37 1 switch (Type) //对该字节进行相应操作
38 1 {
39 2 case Graphic_Clear:
40 2 TempData &= ~(1<< BX);
41 2 break;
42 2 case Graphic_Not:
43 2 TempData ^= (1<< BX);
44 2 break;
45 2 case Graphic_Draw:
46 2 TempData |= ( 1<< BX);
47 2 break;
48 2 default: break;
49 2 }
50 1
51 1 SetPage(DX); //设置行地址
52 1 SetColumn(X); //设置列地址
53 1 WriteData(TempData); //把修改后的字节送回LCD,达到画点目的
54 1 }
55
C51 COMPILER V7.50 DRAWING_LINE 03/31/2008 16:29:42 PAGE 2
56 /********插值法画任意两点之间直线的函数,函数中只用加减法,程序运行效率很高**********/
57
58 DrawLine(uchar x1,uchar y1,uchar x2,uchar y2)
59 { //x1,y1起点坐标;x2,y2终点坐标;
60 1 uchar x,y;
61 1 uchar d_x,d_y;
62 1 char err=0;
63 1 uchar temp=0;
64 1
65 1 if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
66 1 d_y=y2-y1;
67 1 if (d_y==0)
68 1 {
69 2 if (x1>x2) {x=x1;x1=x2;x2=x;}
70 2 for ( x=x1;x<=x2;x++ ) DrawPoint(x,y1,Graphic_Draw);
71 2 }
72 1 else
73 1 {
74 2 if(x2>=x1){temp=1;d_x=x2-x1;}else d_x=x1-x2;
75 2 x=x1;y=y1;DrawPoint(x,y,Graphic_Draw);
76 2 if(temp&&(d_y<=d_x))
77 2 while(x!=x2)
78 2 {if(err<0){x=x+1;err=err+(y2-y);}
79 3 else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);}
80 3 DrawPoint(x,y,Graphic_Draw);
81 3 }
82 2 else if(temp&&(d_y>d_x))
83 2 while(y!=y2)
84 2 {d_x=x2-x;d_y=y2-y;
85 3 if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
86 3 else {y=y+1;err=err-d_x;}
87 3 DrawPoint(x,y,Graphic_Draw);
88 3 }
89 2 else if(!temp&&(d_y<=d_x))
90 2 while(x!=x2)
91 2 {d_x=x-x2;d_y=y2-y;
92 3 if(err<0){x=x-1;err=err+d_y;}
93 3 else {x=x-1;y=y+1;err=err+d_y-d_x;}
94 3 DrawPoint(x,y,Graphic_Draw);
95 3 }
96 2 else if(!temp &&(d_y>d_x))
97 2 while(y!=y2)
98 2 {d_x=x-x2;d_y=y2-y;
99 3 if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
100 3 else {y=y+1;err=err-d_x;}
101 3 DrawPoint(x,y,Graphic_Draw);
102 3 }
103 2 }
104 1 }
105
106
107 /***********************************************************************/
108
109 void DrawLevel(void)
110 {
111 1
112 1 for(i=0;i<127;i++){DrawPoint(i,32,Graphic_Draw);}//画水平直线
113 1
114 1 }
115
116 /************************************************************************************/
117
C51 COMPILER V7.50 DRAWING_LINE 03/31/2008 16:29:42 PAGE 3
118 void DrawSineWave(void)
119 {
120 1 uchar xn=0;
121 1 uchar yn=32;
122 1 uchar i;
123 1 uchar xi,yi;
124 1 for(i=0;i<127;i++)
125 1 {
126 2 xi=i;
127 2 yi=(sin(i*0.1)*32)+32;
128 2
129 2 DrawLine(xn,yn,xi,yi); //在一系列零散的点上,两点两点之间连线,从而得到一条曲线
130 2
131 2 xn=i;
132 2 yn=yi;
133 2
134 2 }
135 1 }
136
137
138
139 void main(void)
140 {
141 1
142 1 while(1)
143 1 {
144 2 DrawLine(63,0,63,63);
145 2 DrawSineWave();
146 2 }
147 1
148 1 }
149
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 903 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 15
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -