⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vter_test.c

📁 wq_vga.rar,系列C51列程
💻 C
📖 第 1 页 / 共 2 页
字号:
#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		//设置时间
#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坐标显示位置

//===========背景图片中间黑色方框区域坐标定义
#define bmpx   58		//左上角x坐标
#define bmpy   95		//左上角y坐标
#define bmpwidth 557	//区域的宽
#define bmpheith 328	//区域的高

//=============显示时间的位置坐标定义
#define distimex  5
#define distimey  5

//=============设置时间时,键入的数据显示坐标定义
#define dissetdatex  (bmpx+60)		//日期行的坐标
#define dissetdatey  (bmpy+77)
#define dissettimex  (bmpx+40)		//时间行的坐标
#define dissettimey  (bmpy+126)

//=============设置时间时,键盘的按键定义
#define boardkeywidth   78		//键盘按键的宽
#define boardkeyheith   77		//键盘按键的高

#define keyboard0x (bmpx+242)	//0数字键(其中bmpx是背景图片中间黑色方框区域坐标,也就是显示键盘的坐标)
#define keyboard0y (bmpy+5)

#define keyboard1x (bmpx+242+boardkeywidth) //1数字键
#define keyboard1y (bmpy+5)

#define keyboard2x (bmpx+242+2*boardkeywidth)//2数字键
#define keyboard2y (bmpy+5)

#define keyboard3x (bmpx+242+3*boardkeywidth)//3数字键
#define keyboard3y (bmpy+5)

#define keyboard4x (bmpx+242)				 //4数字键
#define keyboard4y (bmpy+5+boardkeyheith)

#define keyboard5x (bmpx+242+boardkeywidth)  //5数字键
#define keyboard5y (bmpy+5+boardkeyheith)

#define keyboard6x (bmpx+242+2*boardkeywidth)//6数字键
#define keyboard6y (bmpy+5+boardkeyheith)

#define keyboard7x (bmpx+242+3*boardkeywidth)//7数字键
#define keyboard7y (bmpy+5+boardkeyheith)

#define keyboard8x (bmpx+242)				 //8数字键
#define keyboard8y (bmpy+5+2*boardkeyheith)

#define keyboard9x (bmpx+242+boardkeywidth)  //9数字键
#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];			//触摸屏坐标存储区
unsigned char datebuf[6];			//日期存储区
unsigned char timebuf[8];			//时间存储区
unsigned char int_state=0;		//引发中断的事件(触摸屏、日期、时间)
unsigned char rx_count=0;		//读串口数据的计数器
unsigned char touchok=0;		//触摸屏数据接收OK
unsigned char dateok=0;			//日期数据接收OK
unsigned char timeok=0;			//时间数据接收OK

//=====================按键是否被点击的标志定义,0表示未点击,1点击一次,2点击两次
unsigned char  abstractkey=0;	//简介
unsigned char  timeonkey=0;		//时间
unsigned char  settimekey=0;	//设置时间
unsigned char  drawgraphkey=0;	//绘制图形
unsigned char  stringkey=0;		//字符
unsigned char  wavekey=0;		//显示波形

//=================================函数声明=====================================================
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(也可以由系统自动分配)
  	TMOD=0x20;                              //定时器1设置为模式2
  	SM0=0;
  	SM1=1;                                  //设置串口为方式1,10位异步收发
  	PCON=PCON|0x80;                         //波特率加倍
  	TL1=0xFD;
  	TH1=0xFD;                               //波特率为19200
  	TR1=1;                                  //启动定时器1
  	REN = 1;                                //允许串口接受使能

	EA=1;                                   //全局中断使能,(EA=0,关全局中断;EA=1,开全局中断)
  	ES = 1;                                 //串口中断使能置1,允许串口中断

//===============================================================================================
//显示终端在上电就绪时发送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)					//触摸屏被触发吗?没有则循环检测(读串口)?
		{	
			if(touchok==1)
			{
				chx=(touchbuf[0]*100+touchbuf[1]); //将两字节数据转换为短整型
				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						 //检测这些参数是为了判断是否已经有其他按键事先按下,若有,此按键无效;这个条件是程序的关键

		   || 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)//检测这些参数是为了判断是否已经有其他按键事先按下,若有,此按键无效
		{
			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)//当“显示波形”键按过一次或“绘制图形”键按过一次时也生效(看运行结果就明白了)
		{
			if(chx>key6x && chx<(key6x+keywidth) && chy>key6y && chy<(key6y+keyheith))
			{
				keyvalue=6;
			}
		}

//======================================根据键值实现相应的功能
		switch (keyvalue)
		{
			case 0:
				keyvalue=0;
				break;
			case 1:
				keyvalue=0;			//切记清键值
				onkey1();			//按键1功能函数
				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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -