?? vterminal_bus_wave.c
字號:
//智能顯示終端并行接口通信演示程序之一總線方式。
//仿真器需選擇:"總線設置(Bus Option)"的"僅使用數據總線(Use XBus Only)"。
//
#include <reg51.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
//定義P0口為數據線,P3.1, P3.2為控制線。
sbit CS0 =P3^1; //片選信號
sbit PINT =P3^2; //觸摸屏中斷信號
uchar Fcolor; //背景色
uchar Bcolor; //前景色
//寫一個數據子程序:
Write_Byte(uchar dc_data)
{
uchar xdata DC; //定義一個外部RAM變量
uchar i;
CS0 = 0;
DC = dc_data; //數據dc_data寫到外部RAM(即LCD控制板)。
CS0 = 1;
//加入適當的空操作延時
//當采用更高速的單片機時應加入更多的空操作延時
//這里加上8個空操作延時,在AT89C51,22MHz下是完全沒問題的。
for(i=0;i<8;i++){}
}
Lcd_Clr();
dis_wave(unsigned short x0,unsigned short y0,uchar con,unsigned short *p_data);
/********************************************
定義數據常量,這些數據在實際應用中一般由A/D轉換器采樣所得到。
這里的每一個字節代表一個Y軸坐標的大小即幅度。
**********************************************/
unsigned short code y_data1[110] = {
0x0b,0x0b,0x0b,0x0b,0x0b,
0x0b,0x0b,0x0b,0x0b,0x0b,
0x0b,0x0b,0x0b,0x0b,0x0b,
0x1c,0x1c,0x1c,0x1c,0x1c,
0x1c,0x1c,0x1c,0x1c,0x1c,
0x1c,0x1c,0x1c,0x1c,0x1c,
0x1c,0x1c,0x1c,0x1c,0x1c,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x50,0x50,0x50,0x50,0x50,
0x50,0x50,0x50,0x50,0x50,
0x50,0x50,0x50,0x50,0x50,
0x50,0x50,0x50,0x50,0x50,
0x50,0x50,0x50,0x50,0x50,
0x48,0x46,0x44,0x42,0x40,
0x3e,0x3c,0x3a,0x38,0x36,
0x34,0x32,0x30,0x2e,0x2c,
0x2a,0x28,0x26,0x24,0x22,
0x20,0x1e,0x1c,0x1a,0x18,
0x16,0x14,0x12,0x10,0x84
};
unsigned short code y_data2[110] = {
0x015e,0x015e,0x015e,0x015e,0x015e,
0x015e,0x015e,0x015e,0x015e,0x015e,
0x015e,0x015e,0x015e,0x015e,0x015e,
0x015e,0x015e,0x015e,0x015e,0x015e,
0x015e,0x015e,0x015e,0x015e,0x015e,
0x015e,0x015e,0x015e,0x015e,0x015e,
0x015e,0x015e,0x015e,0x015e,0x015e,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x0084,0x0084,0x0084,0x0084,0x0084,
0x0084,0x0084,0x0084,0x0084,0x0084,
0x0084,0x0084,0x0084,0x0084,0x0084,
0x0084,0x0084,0x0084,0x0084,0x0084,
0x0084,0x0084,0x0084,0x0084,0x0084,
0x48,0x46,0x44,0x42,0x40,
0x3e,0x3c,0x3a,0x38,0x36,
0x34,0x32,0x30,0x2e,0x2c,
0x2a,0x28,0x26,0x24,0x22,
0x20,0x1e,0x1c,0x1a,0x18,
0x16,0x14,0x12,0x10,0xffff
};
main(void)
{
unsigned int i;
CS0 = 0;
PINT = 1;
Fcolor = 0x0;
Bcolor = 0xff;
i = 0;
//顯示終端在上電就緒時發送F0.用仿真器時不要檢測F0.
//當把程序燒寫到單片機上時,顯示終端和單片機同時上電,所以一定
//要檢測是否收到F0。以判斷顯示終端是否上電就緒
//while(!(i == 0xF0))
//{i = Read_Byte();}
IT1 = 0; //外部中斷1為電平觸發方式。
EA=1; //全局中斷使能,(EA=0,關全局中斷;EA=1,開全局中斷)
EX1 = 1; //外部中斷使能置1,允許外部中斷
Lcd_Clr(); //清除全屏。
Fcolor = 0xe0;
dis_wave(0,0,1,y_data1); //以 (0,0) 為坐標原點顯示波形。幅度為單字節
Fcolor = 0x1c;
dis_wave(100,100,2,y_data2); //以 (80,80) 為坐標原點顯示波形。幅度為雙字節。
Fcolor = 0xff;
while(1)
{
}
}
//指令頭,每一條指令都規定為"0x81, command1,command2,Fcolor,Bcolor"
command_head(unsigned char command1,unsigned char command2)
{
Write_Byte(0x81);
Write_Byte(command1);
Write_Byte(command2);
Write_Byte(Fcolor);
Write_Byte(Bcolor);
}
//清屏子程序
Lcd_Clr()
{
command_head(0x43,0x4c);
Write_Byte(0x84);
}
//顯示波形子程序。
//顯示波形的原理是:x軸從坐標原點開始自動加一,y軸(幅度)是*p_data。
//x0, y0是坐標原點。
//con=1 y軸(幅度)的大小用一個字節表示。con = 2:y軸(幅度)的大小用二個字節表示
dis_wave(unsigned short x0,unsigned short y0,uchar con,unsigned short *p_data)
{
unsigned int i;
command_head(0x53,0x53);
Write_Byte(x0/100);
Write_Byte(x0%100);
Write_Byte(y0/100);
Write_Byte(y0%100);
Write_Byte(con);
switch(con)
{case 1:
do
{
Write_Byte(*p_data%100); //因為*p_data定義為short類型指針,所以這里要先取模運算
p_data++;
}
while(*p_data !=0x84);
break;
case 2:
do
{
Write_Byte(*p_data/100);
Write_Byte(*p_data%100);
p_data++;
}
while(*p_data !=0xffff); //這里不能定義為Ox84,因為p_data[x]有可能為0x84
break;
default: break;
}
Write_Byte(0x84);
for(i= 0;i<50;i++){} //特別注意:執行完這條指令后一定要延時至少0.1秒
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -