📄 mcu_test.c
字号:
}
/****************************************************************************
* 名称:MCU_Draw_CircleFill()
* 功能:指定圆心位置及半径,画圆并填充,填充色与边框色一样。
* 入口参数:x0 圆心的x坐标值
* y0 圆心的y坐标值
* xr 圆的X轴半径
* yr 圆的Y轴半径
****************************************************************************/
void MCU_Draw_CircleFill(uint16 x0, uint16 y0, uint16 xr,uint16 yr)
{
write_byte(0x81); //指令开始
write_byte(0x34); //指令代码(画填充圆)
write_byte(Fcolor.B); //前景色3个字节
write_byte(Fcolor.G); //绿
write_byte(Fcolor.R); //红
write_byte(x0/100); //圆心位置x轴坐标(取整运算-x0为两字节变量,高低两字节100进1)
write_byte(x0%100); //
write_byte(y0/100); //圆心位置y轴坐标
write_byte(y0%100); //
write_byte(xr/100); //圆的X轴半径(取整运算-r为两字节变量,高低两字节100进1)
write_byte(xr%100); //
write_byte(yr/100); //圆的Y轴半径
write_byte(yr%100); //
write_byte(0x84); //指令结束
}
/*
******************************************************************
*
* 名称: MCU_Draw_ClearScreen()
* 功能: 用指定的颜色清屏。
* 入口参数:清屏颜色
******************************************************************
*/
void MCU_Draw_ClearScreen()
{
write_byte(0x81); //指令开始
write_byte(0x35); //指令代码(画圆)
write_byte(Fcolor.B); //前景色3个字节
write_byte(Fcolor.G); //绿
write_byte(Fcolor.R); //红
write_byte(0x84); //指令结束
}
/*
******************************************************************
*
* 名称: MCU_Draw_Wave()
* 功能: 用指定的颜色画波形或曲线。显示波形的原理是:
x轴从坐标原点开始自动加一,y轴(幅度)是*p_data
* 入口参数:x0 坐标原点位置x轴坐标
* y0 坐标原点位置y轴坐标
* con=1 y轴(幅度)的大小用一个字节表示。con = 2:y轴(幅度)的大小用二个字节表示
******************************************************************
*/
void MCU_Draw_Wave(uint16 x0,uint16 y0,uint8 con,uint16 *p_data)
{
write_byte(0x81); //指令开始
write_byte(0x36); //指令代码(画圆)
write_byte(Fcolor.B); //前景色3个字节
write_byte(Fcolor.G); //绿
write_byte(Fcolor.R); //红
write_byte(x0/100); //坐标原点位置x轴坐标(取整运算-x0为两字节变量,高低两字节100进1)
write_byte(x0%100); //
write_byte(y0/100); //坐标原点位置y轴坐标
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); //这里不能定义为0x84,因为p_data[x]有可能是0x84
break;
default: break;
}
write_byte(0x84); //指令结束
}
uint16 mouse_x,mouse_y;
uint8 mouse_buf[5];
uint8 cnt=0;
void Wait_MouseKeyDown(void)
{
uint8 ch;
while(1)
{ if(RI==0) continue;
ch=SBUF;
RI=0;
if((cnt==0) && ((ch==0xf3)||(ch==0xf4))) {cnt++;}
else if((cnt==1)&& (ch<100)) {mouse_buf[cnt]=ch;cnt++;}
else if((cnt==2)&& (ch<100)) {mouse_buf[cnt]=ch;cnt++;}
else if((cnt==3)&& (ch<100)) {mouse_buf[cnt]=ch;cnt++;}
else if((cnt==4)&& (ch<100))
{
mouse_buf[cnt]=ch;
cnt=0;
mouse_x=mouse_buf[1]*100+mouse_buf[2];
mouse_y=mouse_buf[3]*100+mouse_buf[4];
break;
}
else {cnt=0;}
}
}
/*
******************************************************************
*
* 名称: MCU_Draw_ClearScreen()
* 功能: 用指定的颜色清屏。
* 入口参数:清屏颜色
******************************************************************
*/
void MCU_Mouse(uint8 en)
{
write_byte(0x81); //指令开始
if(en) write_byte(0x40); //指令代码
else write_byte(0x41); //指令代码
write_byte(0x84); //指令结束
}
/*
*/
/********************************************
定义数据常量,这些数据在实际应用中一般由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
};
//下面是图片的排序号。它是一个头文件,需将其加入到您的程序中。
#define background 0
#define BiaoTi_0 1
#define BiaoTi_1 2
#define product 3
#define wave 4
void main(void)
{
uint16 delay;
for(delay=0;delay<65530;delay++);//延迟一点时间,等待智能VGA控制板初始化完毕
InitUART();
Fcolor.B=191; Fcolor.G=188; Fcolor.R=192;
MCU_Draw_ClearScreen();
MCU_Draw_Pic(0,0,background);
MCU_Draw_Pic_Auto(0,0,BiaoTi_0,BiaoTi_1,25);
MCU_Mouse(1); //打开鼠标功能
while(1)
{
Wait_MouseKeyDown(); //等待鼠标或触摸屏按下并获取按下时的坐标
if((mouse_x>0)&&(mouse_x<156))
{
if((mouse_y>208)&&(mouse_y<288))
{
Fcolor.B=0x0; Fcolor.G=0x0; Fcolor.R=0x0;
MCU_Draw_RectangleFill(156,208,868,560);
Fcolor.B=0x0; Fcolor.G=0x0; Fcolor.R=0xff;
MCU_Draw_LineWith(208,308,558,488,1); //画线
MCU_Draw_LineWith(558,308,208,488,1); //画线
}
if((mouse_y>288)&&(mouse_y<368))
{
Fcolor.B=0x0; Fcolor.G=0x0; Fcolor.R=0x0;
MCU_Draw_RectangleFill(156,208,868,560);
Fcolor.B=0; Fcolor.G=0xff; Fcolor.R=0;
MCU_Draw_Rectangle(650,300,100,180); //矩形
MCU_Draw_RectangleFill(850,300,100,180); //填充矩形
}
if((mouse_y>368)&&(mouse_y<448))
{
Fcolor.B=0x0; Fcolor.G=0x0; Fcolor.R=0x0;
MCU_Draw_RectangleFill(156,208,868,560);
Fcolor.B=0; Fcolor.G=0xff; Fcolor.R=0;
MCU_Draw_CircleFill(270,648,88,88); //填充正圆
MCU_Draw_Circle(460,648,88); //正圆
}
if((mouse_y>448)&&(mouse_y<528))
{
Fcolor.B=0x0; Fcolor.G=0x0; Fcolor.R=0x0;
MCU_Draw_RectangleFill(156,208,868,560);
Fcolor.B=0xff; Fcolor.G=0xff; Fcolor.R=0;
MCU_Draw_CircleFill(698,648,60,100); //填充椭圆
MCU_Draw_CircleFill(915,648,60,100); //填充椭圆
}
if((mouse_y>528)&&(mouse_y<608))
{
Fcolor.B=0x0; Fcolor.G=0x0; Fcolor.R=0x0;
MCU_Draw_RectangleFill(156,208,868,560);
Fcolor.B=0xff; Fcolor.G=0xff; Fcolor.R=0;
MCU_Draw_Wave(200,80,1,y_data1); //波形1
MCU_Draw_Wave(700,80,2,y_data2); //波形2
}
if((mouse_y>608)&&(mouse_y<688))
{
Fcolor.B=0x0; Fcolor.G=0x0; Fcolor.R=0x0;
MCU_Draw_RectangleFill(156,208,868,560);
Bcolor=Fcolor;
Fcolor.B=0xff; Fcolor.G=0xff; Fcolor.R=0xff;
MCU_Draw_String(208,250,0,"欢迎使用EasyVGA(12点阵)");
MCU_Draw_String(208,273,1,"欢迎使用EasyVGA(16点阵)");
MCU_Draw_String(208,338,2,"欢迎使用EasyVGA(24点阵)");
MCU_Draw_String(208,403,3,"欢迎使用EasyVGA(32点阵)");
MCU_Draw_String(208,468,4,"欢迎使用EasyVGA(40点阵)");
MCU_Draw_String(208,550,5,"欢迎使用EasyVGA(48点阵)");
MCU_Draw_String(208,630,6,"欢迎使用EasyVGA(64点阵)");
}
if((mouse_y>688)&&(mouse_y<767))
{
Fcolor.B=0x0; Fcolor.G=0x0; Fcolor.R=0x0;
MCU_Draw_Pic(156,208,product);
//MCU_Draw_Pic_Step(698,518,wheel_0,wheel_1,25);
}
}
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -