?? vter_test.c
字號:
#include <reg51.h>
#include <math.h>
//=======================
#define rate 3.14 //圓周率定義
//==============按鍵圖片的編號定義
#define background 0
#define abstract 1
#define return_ 2
#define timeon 3
#define timeoff 4
#define settime 5
#define drawgraph 6
#define drawline 7
#define drawell 8
#define drawrec 9
#define string 10
#define diswave 11
#define execute 12
#define keyboard 13
#define topbmp 14
#define wavegraph 15
//===========功能按鍵坐標定義
#define key1x 0 //簡介
#define key1y 440
#define key2x 110 //顯示時間
#define key2y 440
#define key3x 220 //設(shè)置時間
#define key3y 440
#define key4x 330 //繪制圖形
#define key4y 440
#define key5x 440 //字符
#define key5y 440
#define key6x 550 //顯示波形
#define key6y 440
#define keywidth 87 //功能按鍵的寬
#define keyheith 40 //功能按鍵的高
#define touchxx 304 //觸摸屏x坐標顯示位置
#define touchxy 9 //觸摸屏x坐標顯示位置
#define touchyx 375 //觸摸屏y坐標顯示位置
#define touchyy 9 //觸摸屏y坐標顯示位置
//===========背景圖片中間黑色方框區(qū)域坐標定義
#define bmpx 58 //左上角x坐標
#define bmpy 95 //左上角y坐標
#define bmpwidth 557 //區(qū)域的寬
#define bmpheith 328 //區(qū)域的高
//=============顯示時間的位置坐標定義
#define distimex 5
#define distimey 5
//=============設(shè)置時間時,鍵入的數(shù)據(jù)顯示坐標定義
#define dissetdatex (bmpx+60) //日期行的坐標
#define dissetdatey (bmpy+77)
#define dissettimex (bmpx+40) //時間行的坐標
#define dissettimey (bmpy+126)
//=============設(shè)置時間時,鍵盤的按鍵定義
#define boardkeywidth 78 //鍵盤按鍵的寬
#define boardkeyheith 77 //鍵盤按鍵的高
#define keyboard0x (bmpx+242) //0數(shù)字鍵(其中bmpx是背景圖片中間黑色方框區(qū)域坐標,也就是顯示鍵盤的坐標)
#define keyboard0y (bmpy+5)
#define keyboard1x (bmpx+242+boardkeywidth) //1數(shù)字鍵
#define keyboard1y (bmpy+5)
#define keyboard2x (bmpx+242+2*boardkeywidth)//2數(shù)字鍵
#define keyboard2y (bmpy+5)
#define keyboard3x (bmpx+242+3*boardkeywidth)//3數(shù)字鍵
#define keyboard3y (bmpy+5)
#define keyboard4x (bmpx+242) //4數(shù)字鍵
#define keyboard4y (bmpy+5+boardkeyheith)
#define keyboard5x (bmpx+242+boardkeywidth) //5數(shù)字鍵
#define keyboard5y (bmpy+5+boardkeyheith)
#define keyboard6x (bmpx+242+2*boardkeywidth)//6數(shù)字鍵
#define keyboard6y (bmpy+5+boardkeyheith)
#define keyboard7x (bmpx+242+3*boardkeywidth)//7數(shù)字鍵
#define keyboard7y (bmpy+5+boardkeyheith)
#define keyboard8x (bmpx+242) //8數(shù)字鍵
#define keyboard8y (bmpy+5+2*boardkeyheith)
#define keyboard9x (bmpx+242+boardkeywidth) //9數(shù)字鍵
#define keyboard9y (bmpy+5+2*boardkeyheith)
#define keyboardcx (bmpx+242+2*boardkeywidth)//清除鍵
#define keyboardcy (bmpy+5+2*boardkeyheith)
#define keyboardokx (bmpx+242) //確定鍵
#define keyboardoky (bmpy+5+3*boardkeyheith)
//=====================全局變量定義===========
unsigned char fcolor,bcolor; //前景色、背景色變量定義
unsigned char touchbuf[4]; //觸摸屏坐標存儲區(qū)
unsigned char datebuf[6]; //日期存儲區(qū)
unsigned char timebuf[8]; //時間存儲區(qū)
unsigned char int_state=0; //引發(fā)中斷的事件(觸摸屏、日期、時間)
unsigned char rx_count=0; //讀串口數(shù)據(jù)的計數(shù)器
unsigned char touchok=0; //觸摸屏數(shù)據(jù)接收OK
unsigned char dateok=0; //日期數(shù)據(jù)接收OK
unsigned char timeok=0; //時間數(shù)據(jù)接收OK
//=====================按鍵是否被點擊的標志定義,0表示未點擊,1點擊一次,2點擊兩次
unsigned char abstractkey=0; //簡介
unsigned char timeonkey=0; //時間
unsigned char settimekey=0; //設(shè)置時間
unsigned char drawgraphkey=0; //繪制圖形
unsigned char stringkey=0; //字符
unsigned char wavekey=0; //顯示波形
//=================================函數(shù)聲明=====================================================
void command_head(unsigned char command1,unsigned char command2);
void command_head2(unsigned char command1,unsigned char command2,unsigned short x0,unsigned short y0);
dis_value(unsigned short x,unsigned short y,unsigned short Va,unsigned char area);
dis_smallchar(unsigned short x,unsigned short y,char *fmt);
void dis_bmp(unsigned short x,unsigned short y,unsigned char num);
void draw_rec(unsigned short x,unsigned short y,unsigned short width,unsigned short heith);
void inv_rec(unsigned short x,unsigned short y,unsigned short width,unsigned short heith);
void draw_line(unsigned short x0,unsigned short y0,unsigned short x1,unsigned short y1,unsigned short width);
void draw_ell(unsigned short x,unsigned short y,unsigned short xsize,unsigned short ysize);
void draw_sin(unsigned short x,unsigned short y,unsigned char mode,double pi,unsigned char cp,unsigned short xsize);
void time_on(unsigned short x,unsigned short y,unsigned char mode);
void Lcd_Clr(void);
void send_byte(unsigned char byte);
void tx_check();
void onkey1(void);
void onkey2(void);
void onkey3(void);
void onkey4(void);
void onkey5(void);
void onkey6(void);
void set_time(void);
void renewtime(unsigned char *da);
unsigned char disfigure(unsigned char num,unsigned char figure);
//==============================================================================================
main(void)
{
unsigned char keyvalue=0;
unsigned short chx,chy;
unsigned int i;
//對AT89C51(11.059MHz)的串口初始化
SP = 0xe0; //定義堆棧的起始地址為0xe0(也可以由系統(tǒng)自動分配)
TMOD=0x20; //定時器1設(shè)置為模式2
SM0=0;
SM1=1; //設(shè)置串口為方式1,10位異步收發(fā)
PCON=PCON|0x80; //波特率加倍
TL1=0xFD;
TH1=0xFD; //波特率為19200
TR1=1; //啟動定時器1
REN = 1; //允許串口接受使能
EA=1; //全局中斷使能,(EA=0,關(guān)全局中斷;EA=1,開全局中斷)
ES = 1; //串口中斷使能置1,允許串口中斷
//===============================================================================================
//顯示終端在上電就緒時發(fā)送F0.用仿真器時不要檢測F0.
//當把程序燒寫到單片機上時,顯示終端和單片機同時上電,所以一定
//要檢測是否收到F0。以判斷顯示終端是否上電就緒
//===============================================================================================
i = 0;
while(!(i == 0xF0))
{
i = SBUF;
}
fcolor = 0x00; //前景色
bcolor = 0xff; //背景色
Lcd_Clr(); //清屏
dis_bmp(0,0,background); //顯示背景圖片
dis_bmp(key1x,key1y,abstract); //顯示按鍵圖片
dis_bmp(key2x,key2y,timeon);
dis_bmp(key3x,key3y,settime);
dis_bmp(key4x,key4y,drawgraph);
dis_bmp(key5x,key5y,string);
dis_bmp(key6x,key6y,diswave);
while(1)
{
while(1) //觸摸屏被觸發(fā)嗎?沒有則循環(huán)檢測(讀串口)?
{
if(touchok==1)
{
chx=(touchbuf[0]*100+touchbuf[1]); //將兩字節(jié)數(shù)據(jù)轉(zhuǎn)換為短整型
chy=(touchbuf[2]*100+touchbuf[3]);
touchok=0;
break;
}
}
dis_value(touchxx+2,touchxy+2,chx,03); //顯示觸摸屏坐標
dis_value(touchyx+2,touchyy+2,chy,03);
//===================================================按鍵檢測程序==================================
if(abstractkey==0 && settimekey==0 && drawgraphkey==0
&& stringkey==0 && wavekey==0 //檢測這些參數(shù)是為了判斷是否已經(jīng)有其他按鍵事先按下,若有,此按鍵無效;這個條件是程序的關(guān)鍵
|| abstractkey==1 || settimekey==1 || drawgraphkey==1 || stringkey==1//若有其它按鍵事先按下,則返回鍵也接收點擊
|| wavekey==2) //當“顯示波形”鍵被按了兩次,“返回”鍵也
{
if(chx>key1x && chx<(key1x+keywidth) && chy>key1y && chy<(key1y+keyheith))//您點擊在按鍵的范圍嗎?
{
keyvalue=1; //鍵值置1
}
}
if(abstractkey==0 && settimekey==0 && drawgraphkey==0 && stringkey==0 && wavekey==0)//檢測這些參數(shù)是為了判斷是否已經(jīng)有其他按鍵事先按下,若有,此按鍵無效
{
if(chx>key2x && chx<(key2x+keywidth) && chy>key2y && chy<(key2y+keyheith))
{
keyvalue=2;
}
}
if(abstractkey==0 && settimekey==0 && drawgraphkey==0 && stringkey==0 && wavekey==0)//不用我多說了吧?
{
if(chx>key3x && chx<(key3x+keywidth) && chy>key3y && chy<(key3y+keyheith))
{
keyvalue=3;
}
}
if(abstractkey==0 && settimekey==0 && drawgraphkey==0 && stringkey==0 && wavekey==0
|| drawgraphkey==1)
{
if(chx>key4x && chx<(key4x+keywidth) && chy>key4y && chy<(key4y+keyheith))
{
keyvalue=4;
}
}
if(abstractkey==0 && settimekey==0 && drawgraphkey==0 && stringkey==0 && wavekey==0
|| drawgraphkey==1)
{
if(chx>key5x && chx<(key5x+keywidth) && chy>key5y && chy<(key5y+keyheith))
{
keyvalue=5;
}
}
if( abstractkey==0 && settimekey==0 && drawgraphkey==0 && stringkey==0 && wavekey==0
|| wavekey==1 || drawgraphkey==1)//當“顯示波形”鍵按過一次或“繪制圖形”鍵按過一次時也生效(看運行結(jié)果就明白了)
{
if(chx>key6x && chx<(key6x+keywidth) && chy>key6y && chy<(key6y+keyheith))
{
keyvalue=6;
}
}
//======================================根據(jù)鍵值實現(xiàn)相應(yīng)的功能
switch (keyvalue)
{
case 0:
keyvalue=0;
break;
case 1:
keyvalue=0; //切記清鍵值
onkey1(); //按鍵1功能函數(shù)
break;
case 2:
keyvalue=0;
onkey2();
break;
case 3:
keyvalue=0;
onkey3();
break;
case 4:
keyvalue=0;
onkey4();
break;
case 5:
keyvalue=0;
onkey5();
break;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -