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

📄 mcu_test.c

📁 c /c++的智能VGA控制资料。值得大家一看!!
💻 C
📖 第 1 页 / 共 2 页
字号:
//下面是图片的排序号。它是一个头文件,需将其加入到您的程序中。
#define        hehua              0
#define        pic_0              1
#define        pic_1              2
#define        pic_2              3
#define        wheel_0              4
#define        wheel_1              5

#include<Atmel/AT89x52.H>
//定义颜色数据类型(可以是数据结构) 
typedef struct _tcolor
{
   unsigned char R;
   unsigned char G;
   unsigned char B;
} TCOLOR;
#define uint16 unsigned short
#define uint8  unsigned char
TCOLOR Fcolor,  Bcolor;
//*************************************************************
void InitUART(void)  //串口初始化函数,使用11.0592M晶体
{
  	SCON = SCON|0x50; 		//选择模式1,8位数据格式,使能UART 
   	PCON |= 0x80;		    //波特率加倍
   	TMOD =TMOD| 0x20; 		//定时器1:模式2
    //TH1=256-(2f/32*12*19200)
   	TH1 = 0xfd; 		    //定时器1自动装载初值,时钟频率11.0592MHz,fd(19200bps)
   	TL1 = 0xfd;
	TR1 = 1; 			    //定时器1计数使能 
	REN = 1;                //允许串口接受使能
}
/*
******************************************************************
*
* 名称:    write_byte()
* 功能:    向串口发送一个字节的数据
* 入口参数:i为待发送的字节数据
******************************************************************
*/

void write_byte(uint8 i)
{
	SBUF=i;
	while(TI==0){}
    TI=0;
}


/*
******************************************************************
*
* 名称:    MCU_Draw_String()
* 功能:    利用中英文汉字库显示中英文
* 入口参数:x=起点X轴坐标;y=起点Y轴坐标;
*           mode=汉字库类型选择;string=指向需显示的内容
******************************************************************
*/
void  MCU_Draw_String(uint16 x, uint16 y, uint8 mode,char *string)
{
	write_byte(0x81);  //指令开始 
	write_byte(mode);  //汉字库指令代码

	write_byte(Bcolor.B);  //背景色3个字节
	write_byte(Bcolor.G);  //绿
	write_byte(Bcolor.R);  //红
	write_byte(Fcolor.B);  //前景色3个字节
	write_byte(Fcolor.G);  //绿
	write_byte(Fcolor.R);  //红
	write_byte(x/100);  //起点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x%100); //起点位置x轴坐标(取模运算) 
	write_byte(y/100);  //起点位置y轴坐标
	write_byte(y%100); //起点位置y轴坐标
 	while(*string)			//为0时(字符串结束)退出
   {
    write_byte(*string);
	string++;
   }
	write_byte(0x84);   //指令结束 
}

/*
******************************************************************
*
* 名称:    MCU_Draw_Variable()
* 功能:    利用中英文汉字库显示变量
* 入口参数:x=起点X轴坐标;y=起点Y轴坐标
*           mode=汉字库类型选择;i=变量值
******************************************************************
*/
void  MCU_Draw_Variable(uint16 x, uint16 y, uint8 mode,uint16 i)
{
	write_byte(0x81);  //指令开始 
	write_byte(mode|0x10); 

	write_byte(Bcolor.B);  //背景色3个字节
	write_byte(Bcolor.G);  //绿
	write_byte(Bcolor.R);  //红
	write_byte(Fcolor.B);  //前景色3个字节
	write_byte(Fcolor.G);  //绿
	write_byte(Fcolor.R);  //红
	write_byte(x/100);  //起点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x%100); //起点位置x轴坐标(取模运算) 
	write_byte(y/100);  //起点位置y轴坐标
	write_byte(y%100); //起点位置y轴坐标
	write_byte(i/100);  //变量
	write_byte(i%100); //
	write_byte(0x84);   //指令结束 

}
/****************************************************************************
* 名称:MCU_Draw_Pic()
* 功能:显示一幅图片
*     
* 入口参数:x		起点的x坐标值
*           y		起点的y坐标值
*           num	    图片编号
****************************************************************************/
void  MCU_Draw_Pic(uint16 x,uint16 y,uint16 num)
{
	write_byte(0x81);  //指令开始 
    write_byte(0x20);
	write_byte(x/100);  //起点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x%100); //起点位置x轴坐标(取模运算) 
	write_byte(y/100);  //起点位置y轴坐标
	write_byte(y%100); //起点位置y轴坐标
	write_byte(num/100);  //图片编号
	write_byte(num%100); //
	write_byte(0x84);   //指令结束 

}
/****************************************************************************
* 名称:MCU_Draw_Pic_Auto()
* 功能:循环显示多幅图片,产生动画效果;当显示到第end幅时,又从第start开始重新显示,不断循环
*     
* 入口参数:x		起点的x坐标值
*           y		起点的y坐标值
*           start	起始图片编号
*           end	    结束图片编号
*           T	    显示时间间隔   	   //为0时表示关闭动画
****************************************************************************/
void  MCU_Draw_Pic_Auto(uint16 x,uint16 y,uint16 start,uint16 end,uint8 T)
{
	write_byte(0x81);  //指令开始 
    write_byte(0x21);
	write_byte(x/100);  //起点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x%100); //起点位置x轴坐标(取模运算) 
	write_byte(y/100);  //起点位置y轴坐标
	write_byte(y%100); //起点位置y轴坐标

	write_byte(start/100);  // 起始图片编号
	write_byte(start%100); //
	write_byte(end/100);  //   结束图片编号
	write_byte(end%100); //

	write_byte(T);   //指令结束 
	write_byte(0x84);   //指令结束 

}
/****************************************************************************
* 名称:MCU_Draw_Pic_Step()
* 功能:顺序显示多幅图片,当显示到第end幅时停止显示
*     
* 入口参数:x		起点的x坐标值
*           y		起点的y坐标值
*           start	起始图片编号
*           end	    结束图片编号
*           T	    显示时间间隔   	   //为0时表示关闭顺序显示
****************************************************************************/
void  MCU_Draw_Pic_Step(uint16 x,uint16 y,uint16 start,uint16 end,uint8 T)
{
	write_byte(0x81);  //指令开始 
    write_byte(0x22);
	write_byte(x/100);  //起点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x%100); //起点位置x轴坐标(取模运算) 
	write_byte(y/100);  //起点位置y轴坐标
	write_byte(y%100); //起点位置y轴坐标
 	write_byte(start/100);  // 起始图片编号
	write_byte(start%100); //
	write_byte(end/100);  //   结束图片编号
	write_byte(end%100); //
	write_byte(T);   //指令结束 
	write_byte(0x84);   //指令结束 

}
/*
******************************************************************
*
* 名称:MCU_Draw_LineWith()
* 功能:指定起点和终点画直线。
* 入口参数:x0 直线起点所在列的位置
* 			y0 直线起点所在行的位置
*			x1 直线终点所在列的位置
*			y1 直线终点所在行的位置
*           width 直线宽度 (需小于30)         
******************************************************************
*/
void  MCU_Draw_LineWith(uint16 x0,uint16 y0,uint16 x1,uint16 y1,uint8 width)
{
	write_byte(0x81);  //指令开始 
	write_byte(0x30);  //指令代码(画直线) 
	write_byte(Fcolor.B);  //前景色3个字节
	write_byte(Fcolor.G);  //绿
	write_byte(Fcolor.R);  //红
	write_byte(x0/100);  //直线起点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x0%100); //直线起点位置x轴坐标(取模运算) 
	write_byte(y0/100);  //直线起点位置y轴坐标
	write_byte(y0%100); //直线起点位置y轴坐标
	write_byte(x1/100);  //直线终点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x1%100); //直线终点位置x轴坐标(取模运算) 
	write_byte(y1/100);  //直线终点位置y轴坐标
	write_byte(y1%100); //直线终点位置y轴坐标
	write_byte(width);   //直线宽度(宽度不得大于30)
	write_byte(0x84);   //指令结束 
}
/*
******************************************************************
*
* 名称:MCU_Draw_Rectangle()
* 功能:画矩形。
* 入口参数:x0 矩形起点所在列的位置
* 			y0 矩形起点所在行的位置
*			width 矩形宽
*			high 矩形高
******************************************************************
*/
void  MCU_Draw_Rectangle(uint16 x0, uint16 y0,uint16 width,uint16 high)
{
	write_byte(0x81);  //指令开始 
	write_byte(0x31);  //指令代码(画直线) 
	write_byte(Fcolor.B);  //前景色3个字节
	write_byte(Fcolor.G);  //绿
	write_byte(Fcolor.R);  //红
	write_byte(x0/100);  //矩形起点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x0%100); // 
	write_byte(y0/100);  //矩形起点位置y轴坐标
	write_byte(y0%100); //
	write_byte(width/100);  //矩形宽度(取整运算-width为两字节变量,高低两字节100进1) 
	write_byte(width%100); //(取模运算) 
	write_byte(high/100);  //矩形高度
	write_byte(high%100); //(取模运算) 
	write_byte(0x84);   //指令结束 
}  
/*
******************************************************************
*
* 名称:MCU_Draw_RectangleFill()
* 功能:清除矩形。
* 入口参数:x0 矩形起点所在列的位置
* 			y0 矩形起点所在行的位置
*			width 矩形宽
*			high 矩形高
* 说明: 
******************************************************************
*/
void  MCU_Draw_RectangleFill(uint16 x0, uint16 y0,uint16 width,uint16 high)
{
	write_byte(0x81);  //指令开始 
	write_byte(0x32);  //指令代码(清除矩形) 
	write_byte(Fcolor.B);  //前景色3个字节
	write_byte(Fcolor.G);  //绿
	write_byte(Fcolor.R);  //红
	write_byte(x0/100);  //矩形起点位置x轴坐标(取整运算-x为两字节变量,高低两字节100进1) 
	write_byte(x0%100); // 
	write_byte(y0/100);  //矩形起点位置y轴坐标
	write_byte(y0%100); //
	write_byte(width/100);  //矩形宽度(取整运算-width为两字节变量,高低两字节100进1) 
	write_byte(width%100); //(取模运算) 
	write_byte(high/100);  //矩形高度
	write_byte(high%100); //(取模运算)
	write_byte(0x84);   //指令结束 
} 
/****************************************************************************
* 名称:MCU_Draw_Circle()
* 功能:指定圆心位置及半径,画圆。
* 入口参数:x0		圆心的x坐标值
*           y0		圆心的y坐标值
*           r       圆的半径
****************************************************************************/
void  MCU_Draw_Circle(uint16 x0, uint16 y0, uint16 r)
{
	write_byte(0x81);  //指令开始 
	write_byte(0x33);  //指令代码(画圆) 
	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(r/100);   //圆的X轴半径(取整运算-r为两字节变量,高低两字节100进1) 
	write_byte(r%100);   // 
	write_byte(r/100);   //圆的Y轴半径
	write_byte(r%100);   //
	write_byte(0x84);    //指令结束 

⌨️ 快捷键说明

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