?? vterminal_bus_wave.lst
字號:
C51 COMPILER V7.20 VTERMINAL_BUS_WAVE 07/29/2006 16:01:54 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE VTERMINAL_BUS_WAVE
OBJECT MODULE PLACED IN .\VTerminal_bus_wave.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\VTerminal_bus\VTerminal_bus_wave\VTerminal_bus_wave.c BROWSE DEBUG OB
-JECTEXTEND PRINT(.\VTerminal_bus_wave.lst) OBJECT(.\VTerminal_bus_wave.obj)
line level source
1 //智能顯示終端并行接口通信演示程序之一總線方式。
2 //仿真器需選擇:"總線設置(Bus Option)"的"僅使用數據總線(Use XBus Only)"。
3 //
4
5 #include <reg51.h>
6 #include <stdio.h>
7 #include <string.h>
8 #define uchar unsigned char
9
10 //定義P0口為數據線,P3.1, P3.2為控制線。
11 sbit CS0 =P3^1; //片選信號
12 sbit PINT =P3^2; //觸摸屏中斷信號
13 uchar Fcolor; //背景色
14 uchar Bcolor; //前景色
15
16 //寫一個數據子程序:
17 Write_Byte(uchar dc_data)
18 {
19 1 uchar xdata DC; //定義一個外部RAM變量
20 1 uchar i;
21 1 CS0 = 0;
22 1 DC = dc_data; //數據dc_data寫到外部RAM(即LCD控制板)。
23 1 CS0 = 1;
24 1 //加入適當的空操作延時
25 1 //當采用更高速的單片機時應加入更多的空操作延時
26 1 //這里加上8個空操作延時,在AT89C51,22MHz下是完全沒問題的。
27 1 for(i=0;i<8;i++){}
28 1 }
29
30 Lcd_Clr();
31 dis_wave(unsigned short x0,unsigned short y0,uchar con,unsigned short *p_data);
32
33 /********************************************
34 定義數據常量,這些數據在實際應用中一般由A/D轉換器采樣所得到。
35 這里的每一個字節代表一個Y軸坐標的大小即幅度。
36 **********************************************/
37 unsigned short code y_data1[110] = {
38 0x0b,0x0b,0x0b,0x0b,0x0b,
39 0x0b,0x0b,0x0b,0x0b,0x0b,
40 0x0b,0x0b,0x0b,0x0b,0x0b,
41 0x1c,0x1c,0x1c,0x1c,0x1c,
42 0x1c,0x1c,0x1c,0x1c,0x1c,
43 0x1c,0x1c,0x1c,0x1c,0x1c,
44 0x1c,0x1c,0x1c,0x1c,0x1c,
45 0x00,0x00,0x00,0x00,0x00,
46 0x00,0x00,0x00,0x00,0x00,
47 0x00,0x00,0x00,0x00,0x00,
48 0x00,0x00,0x00,0x00,0x00,
49 0x50,0x50,0x50,0x50,0x50,
50 0x50,0x50,0x50,0x50,0x50,
51 0x50,0x50,0x50,0x50,0x50,
52 0x50,0x50,0x50,0x50,0x50,
53 0x50,0x50,0x50,0x50,0x50,
54 0x48,0x46,0x44,0x42,0x40,
C51 COMPILER V7.20 VTERMINAL_BUS_WAVE 07/29/2006 16:01:54 PAGE 2
55 0x3e,0x3c,0x3a,0x38,0x36,
56 0x34,0x32,0x30,0x2e,0x2c,
57 0x2a,0x28,0x26,0x24,0x22,
58 0x20,0x1e,0x1c,0x1a,0x18,
59 0x16,0x14,0x12,0x10,0x84
60 };
61
62 unsigned short code y_data2[110] = {
63 0x015e,0x015e,0x015e,0x015e,0x015e,
64 0x015e,0x015e,0x015e,0x015e,0x015e,
65 0x015e,0x015e,0x015e,0x015e,0x015e,
66 0x015e,0x015e,0x015e,0x015e,0x015e,
67 0x015e,0x015e,0x015e,0x015e,0x015e,
68 0x015e,0x015e,0x015e,0x015e,0x015e,
69 0x015e,0x015e,0x015e,0x015e,0x015e,
70 0x00,0x00,0x00,0x00,0x00,
71 0x00,0x00,0x00,0x00,0x00,
72 0x00,0x00,0x00,0x00,0x00,
73 0x00,0x00,0x00,0x00,0x00,
74 0x0084,0x0084,0x0084,0x0084,0x0084,
75 0x0084,0x0084,0x0084,0x0084,0x0084,
76 0x0084,0x0084,0x0084,0x0084,0x0084,
77 0x0084,0x0084,0x0084,0x0084,0x0084,
78 0x0084,0x0084,0x0084,0x0084,0x0084,
79 0x48,0x46,0x44,0x42,0x40,
80 0x3e,0x3c,0x3a,0x38,0x36,
81 0x34,0x32,0x30,0x2e,0x2c,
82 0x2a,0x28,0x26,0x24,0x22,
83 0x20,0x1e,0x1c,0x1a,0x18,
84 0x16,0x14,0x12,0x10,0xffff
85 };
86
87 main(void)
88 {
89 1 unsigned int i;
90 1
91 1 CS0 = 0;
92 1 PINT = 1;
93 1 Fcolor = 0x0;
94 1 Bcolor = 0xff;
95 1 i = 0;
96 1
97 1 //顯示終端在上電就緒時發送F0.用仿真器時不要檢測F0.
98 1 //當把程序燒寫到單片機上時,顯示終端和單片機同時上電,所以一定
99 1 //要檢測是否收到F0。以判斷顯示終端是否上電就緒
100 1 //while(!(i == 0xF0))
101 1 //{i = Read_Byte();}
102 1
103 1 IT1 = 0; //外部中斷1為電平觸發方式。
104 1 EA=1; //全局中斷使能,(EA=0,關全局中斷;EA=1,開全局中斷)
105 1 EX1 = 1; //外部中斷使能置1,允許外部中斷
106 1
107 1 Lcd_Clr(); //清除全屏。
108 1 Fcolor = 0xe0;
109 1 dis_wave(0,0,1,y_data1); //以 (0,0) 為坐標原點顯示波形。幅度為單字節
110 1 Fcolor = 0x1c;
111 1 dis_wave(100,100,2,y_data2); //以 (80,80) 為坐標原點顯示波形。幅度為雙字節。
112 1 Fcolor = 0xff;
113 1 while(1)
114 1 {
115 2 }
116 1 }
C51 COMPILER V7.20 VTERMINAL_BUS_WAVE 07/29/2006 16:01:54 PAGE 3
117
118 //指令頭,每一條指令都規定為"0x81, command1,command2,Fcolor,Bcolor"
119 command_head(unsigned char command1,unsigned char command2)
120 {
121 1 Write_Byte(0x81);
122 1 Write_Byte(command1);
123 1 Write_Byte(command2);
124 1 Write_Byte(Fcolor);
125 1 Write_Byte(Bcolor);
126 1 }
127
128 //清屏子程序
129 Lcd_Clr()
130 {
131 1 command_head(0x43,0x4c);
132 1 Write_Byte(0x84);
133 1 }
134 //顯示波形子程序。
135 //顯示波形的原理是:x軸從坐標原點開始自動加一,y軸(幅度)是*p_data。
136 //x0, y0是坐標原點。
137 //con=1 y軸(幅度)的大小用一個字節表示。con = 2:y軸(幅度)的大小用二個字節表示
138 dis_wave(unsigned short x0,unsigned short y0,uchar con,unsigned short *p_data)
139 {
140 1 unsigned int i;
141 1 command_head(0x53,0x53);
142 1 Write_Byte(x0/100);
143 1 Write_Byte(x0%100);
144 1 Write_Byte(y0/100);
145 1 Write_Byte(y0%100);
146 1 Write_Byte(con);
147 1 switch(con)
148 1 {case 1:
149 2 do
150 2 {
151 3 Write_Byte(*p_data%100); //因為*p_data定義為short類型指針,所以這里要先取模運算
152 3 p_data++;
153 3 }
154 2 while(*p_data !=0x84);
155 2 break;
156 2
157 2 case 2:
158 2 do
159 2 {
160 3 Write_Byte(*p_data/100);
161 3 Write_Byte(*p_data%100);
162 3 p_data++;
163 3 }
164 2 while(*p_data !=0xffff); //這里不能定義為Ox84,因為p_data[x]有可能為0x84
165 2 break;
166 2
167 2 default: break;
168 2 }
169 1 Write_Byte(0x84);
170 1 for(i= 0;i<50;i++){} //特別注意:執行完這條指令后一定要延時至少0.1秒
171 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 326 ----
CONSTANT SIZE = 440 ----
XDATA SIZE = ---- 1
PDATA SIZE = ---- ----
C51 COMPILER V7.20 VTERMINAL_BUS_WAVE 07/29/2006 16:01:54 PAGE 4
DATA SIZE = 2 10
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -