?? disp160_128.lst
字號:
C51 COMPILER V7.50 DISP160_128 05/21/2009 07:54:16 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DISP160_128
OBJECT MODULE PLACED IN Disp160_128.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Disp160_128.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"t6963.h"
2 #include"reg51.h"
3 #include"tab.h"
4 extern void Delay_500ms();
5 //引腳定義
6 sbit _CD=P1^5;
7 sbit _RD=P1^6;
8 sbit _WR=P1^7;
9 //讀狀態函數
10 unsigned char Read_State()
11 {
12 1 unsigned char a;
13 1 P2=0xff;//讀狀態之前先將數據線拉高
14 1 _CD=1; //1為指令通道,0為數據通道
15 1 _RD=0;
16 1 _RD=1;
17 1 a=P2;
18 1 return a;
19 1 }
20 //bit0指令寫狀態位,bit1數據讀/寫狀態位,為1時候空閑
21 void Enable()
22 {
23 1 while(1)
24 1 if((Read_State()&3)==3)break;
25 1 }
26 //bit3數據自動寫狀態位,為1時候空閑
27 void Aut_Write()
28 {
29 1 while(1)
30 1 if((Read_State()&8)==8)break;
31 1 }
32 //寫單參數函數,Data1為傳入的參數,Com為傳入的指令
33 //注意:寫入順序為先數據后寫指令,不可顛倒
34 void Write_Data1(unsigned char Data1,unsigned char Com)
35 {
36 1 Enable();
37 1 _CD=0;
38 1 P2=Data1;
39 1 _WR=0;
40 1 _WR=1;
41 1 Enable();
42 1 _CD=1;
43 1 P2=Com;
44 1 _WR=0;
45 1 _WR=1;
46 1 }
47 //寫雙參數函數,Data1/Data2為傳入的參數,Com為傳入的指令
48 //注意:寫入順序為先數據Data1后寫數據Data2,最后寫指令,不可顛倒
49 void Write_Data2(unsigned char Data1,unsigned char Data2,unsigned char Com)
50 {
51 1 Enable();
52 1 _CD=0;
53 1 P2=Data1;
54 1 _WR=0;
55 1 _WR=1;
C51 COMPILER V7.50 DISP160_128 05/21/2009 07:54:16 PAGE 2
56 1 Enable();
57 1 _CD=0;
58 1 P2=Data2;
59 1 _WR=0;
60 1 _WR=1;
61 1 Enable();
62 1 _CD=1;
63 1 P2=Com;
64 1 _WR=0;
65 1 _WR=1;
66 1 }
67 //寫指令函數
68 void Write_Com(unsigned char Com)
69 {
70 1 Enable();
71 1 _CD=1;
72 1 P2=Com;
73 1 _WR=0;
74 1 _WR=1;
75 1 }
76 //寫8字節數據函數Addr表示數據首地址,Way表示寫的方式
77 void Write_8_Data(unsigned char Addr,unsigned char Way)
78 {
79 1 Aut_Write();//判斷是否能自動寫
80 1 Write_Com(AUT_WR);//自動寫開始
81 1 Write_Data1(Addr,Way);
82 1 Write_Com(AUT_WO);//自動寫結束
83 1 }
84 //設置數據顯示在屏幕上的坐標(以字節為單位)
85 //x表示顯示的行(0~15),y表示顯示的列(0~19)
86 void Set_xy(unsigned char x,unsigned char y)
87 {
88 1 unsigned int a;
89 1 a=x*20+y;
90 1 Write_Data2(a&0xff,a>>8,ADR_POS);
91 1 }
92 //設置數據存儲起始地址
93 void Set_Addr(unsigned char Addr1,unsigned char Addr2)
94 {
95 1 Write_Data2(Addr1,Addr2,ADR_POS);
96 1 }
97 /*CGRAM偏置地址設置函數*/
98 void Set_CGRAM()
99 {
100 1 Write_Data2(1,0,CGR_POS);
101 1 }
102 //液晶初始化函數
103 //(文本區首地址D1,文本區首地址D2, 文本區寬度,
104 //圖形區首地址D1, 圖形區首地址D2, 圖形區寬度,
105 //光標形狀, 顯示方式, 顯示開關)
106 void LCD_Init(unsigned char Txt1,unsigned char Txt2,unsigned char Txt_Wide,
107 unsigned char Map1,unsigned char Map2,unsigned char Map_Wide,
108 unsigned char Guang_Biao,unsigned char Disp_Mode,unsigned char Kai_Guan)
109 {
110 1 Write_Data2(Txt1,Txt2,TXT_STP); //設置文本方式RAM起始地址
111 1 Write_Data2(Txt_Wide,0,TXT_WID); //設置文本模式寬度,寬度為N/6或N/8,N為寬度點數,比如N=160
112 1 Write_Data2(Map1,Map2,GRH_STP); //設置圖形方式RAM起始地址
113 1 Write_Data2(Map_Wide,0,GRH_WID); //設置圖形模式的寬度,寬度為N/6或N/8,N為寬度點數,如160
114 1 Write_Com(CUR_SHP|Guang_Biao);
115 1 Write_Com(Disp_Mode);
116 1 Write_Com(DIS_SW|Kai_Guan);
117 1 }
C51 COMPILER V7.50 DISP160_128 05/21/2009 07:54:16 PAGE 3
118 //顯示一個漢字子程序,
119 //x表示顯示的行(0~15),y表示顯示的列(0~19),n表示字在表格中的位置
120 void Han_Zi(unsigned char x,unsigned char y,unsigned char Addr)
121 {
122 1 Set_xy(x,y);
123 1 Write_8_Data(Addr,INC_WR);
124 1 Write_8_Data(Addr+2,INC_WR);
125 1 Set_xy(x+1,y);
126 1 Write_8_Data(Addr+1,INC_WR);
127 1 Write_8_Data(Addr+3,INC_WR);
128 1 }
129 //清屏程序
130 void Clear_LCD()
131 {
132 1 unsigned int a;
133 1 Set_xy(0,0);
134 1 for(a=0;a<320;a++)
135 1 Write_8_Data(0x80,INC_WR);
136 1 }
137 /*自定義字符寫入CGROM函數*/
138 void Write_CGORM()
139 {
140 1 int a;
141 1 Set_CGRAM();
142 1 Set_Addr(0,0x0c);
143 1 for(a=0;a<2568;a++)
144 1 Write_8_Data(Tab[a],INC_WR);
145 1 }
146 //設置點顯示在屏幕上的坐標(以位為單位)
147 //x表示顯示的行(0~127),y表示顯示的列(0~159),n=1表示打個點,n=0清除一個點
148 void Point(unsigned char x,unsigned char y,bit n)
149 {
150 1 unsigned char point;
151 1 unsigned int temp;
152 1 temp=x*20+y/8+320;
153 1 point=0xf7-y%8;
154 1 if(n)point|=0xf8;
155 1 else point&=0xf7;
156 1 Write_Data2(temp&0xff,temp>>8,0x24); //設置寫地址
157 1 Write_Com(point);
158 1 }
159 //畫線子程序,x1/y1/x2/y2,分別表示起點和終點的坐標、draw=1表示畫直線為0表示清除直線
160 void Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit n)
161 {
162 1 unsigned char _x,_y;
163 1 unsigned char i,j=0,k=0;
164 1 unsigned char shang1,shang2,yu_shu;
165 1 if(x1>=x2)_x=x1-x2;
166 1 else _x=x2-x1;
167 1 if(y1>=y2)_y=y1-y2;
168 1 else _y=y2-y1;
169 1 if(!_x)
170 1 {
171 2 if(y1>y2)for(i=y2;i<=y1;i++)Point(x1,i,n);
172 2 else for(i=y1;i<=y2;i++)Point(x1,i,n);
173 2 }
174 1 else if(!_y)
175 1 {
176 2 if(x1>x2)for(i=x2;i<=x1;i++)Point(i,y1,n);
177 2 else for(i=x1;i<=x2;i++)Point(i,y1,n);
178 2 }
179 1 else if(_x>=_y)
C51 COMPILER V7.50 DISP160_128 05/21/2009 07:54:16 PAGE 4
180 1 {
181 2 shang1=_x/_y;
182 2 yu_shu=_x%_y;
183 2 shang2=_x/yu_shu;
184 2 //if(_x%yu_shu*10/yu_shu>=5)shang2+=shang2;
185 2 if((y2>y1)&&(x2>x1))
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -