嵌入式—基于uCOSII的小型GUI的应用程序编写实验

输出一个简单的计算器:
一、实验目的:
1. 掌握在UCOSII操作系统下编写应用程序的基本方法
二、实验设备:
1. EL-ARM-860教学实验箱,PentiumII以上的PC机,仿真调试电缆、串口直连电缆
2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,
仿真调试驱动程序
三、实验内容:
1. 在移植好的UCOSII项目中添加串口、LCD、键盘的驱动程序
2. 学习在UCOSII下,多应用任务的简单编程实例
完成计算器设计:
1. 按键任务
捕获0~9,+,-,=按键
2. 显示任务
LCD显示按键13个按键,按键区域(0~9)红色显示,未按键以灰色显示,以及显示计算结果。
四、实验步骤:
在PC并口和实验箱的CPU之间,连接仿真调试电缆, 以及串口间连接公/母接头串口线。打开超级终端,配置串口的属性(如COM1),配置波特率为115200,校验位无,数据位为8,停止位为1,数据控制流为无;检查连接是否可靠,可靠后,接入电源线,系统上电,同时按住“空格”键,进入VIVI状态,按下LCD电源开关。打开ADS1.2开发环境,从里面打开\实验程序\UCOSII\ADS\实验五\Tasks_UCOSII目录下的Tasks_UCOSII.mcp项目文件并进行编译,但有函数需要修改才可以输出结果,在Application文件中的main函数代码的Task_4修改如下:

void Task_4(void *pdata)
{	
    I32 number;
	INT8U Loop;

	
  	for(;;) 
	{
		
		number = GUI_WaitKey();
		Loop = TRUE;
		//dd_now(number);
		do
		{
			switch (number)
			{
				case  GUI_KEY_START:					// 得到开始命令
				
					Set_Color(GUI_YELLOW);
  					Fill_Rect(0,0,650,500);
  	
  					Set_Color(GUI_WHITE);
  					Set_BkColor (GUI_WHITE);
  	         
    			    Fill_Rect(0,0,2,500);
    			    Fill_Rect(0,500,650,500);
    			    Fill_Rect(6500,0,650,500);
	
					
					Set_Color(GUI_WHITE);
    			    Fill_Rect(150,90,380,140);
    			    Set_Color(GUI_GRAY);
    			    Fill_Circle(170,170,20);
    			    Fill_Circle(230,170,20);
                    Fill_Circle(290,170,20);
                    Fill_Circle(350,170,20);
                    
                    Fill_Circle(170,230,20);
    			    Fill_Circle(230,230,20);
                    Fill_Circle(290,230,20);
                    Fill_Circle(350,230,20);
                    
                    Fill_Circle(170,290,20);
    			    Fill_Circle(230,290,20);
                    Fill_Circle(290,290,20);
                    Fill_Circle(350,290,20);
                    
                    Fill_Circle(170,350,20);
    			    Fill_Circle(230,350,20);
                    Fill_Circle(290,350,20);
                    Fill_Circle(350,350,20);
                    
                    Set_Color(GUI_BLACK);
    				Set_Font    (&GUI_Font8x16);
    				Disp_String("7",170,170);
    				Disp_String("8",230,170);
    				Disp_String("9",290,170);
    				Disp_String("x",350,170);
    				Disp_String("5",170,230);
    				Disp_String("6",230,230);
    				Disp_String("7",290,230);
    				Disp_String("/",350,230);
    				Disp_String("1",170,290);
    				Disp_String("2",230,290);
    				Disp_String("3",290,290);
    				Disp_String("+",350,290);
    				Disp_String("0",170,350);
    				Disp_String(".",230,350);
    				Disp_String("-",290,350);
    				Disp_String("=",345,350);
                    

					Loop = FALSE;
					number = 0;
					break;
			
		    	default:								// 等待主任务发送的键值命令
			
					number = GUI_WaitKey();
					Loop = TRUE;
					break;
			}
		}while(Loop==TRUE);
		
		while(1){
			switch (key_number)
			{
			case 0:
				Set_Color(GUI_RED);
				Fill_Circle(170, 350,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(170, 350,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("0", 170, 350);
				break;
			case 1:
				Set_Color(GUI_RED);
				Fill_Circle(170, 290,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(170, 290,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("1", 170, 290);
				break;
			case 2:
								Set_Color(GUI_RED);
				Fill_Circle(230, 290,20);
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(230, 290,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("2", 230, 290);
				break;
			case 3:
								Set_Color(GUI_RED);
				Fill_Circle(290, 290,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(290, 290,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("3", 290, 290);
				break;
			case 4:
								Set_Color(GUI_RED);
				Fill_Circle(170, 230,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(170, 230,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("4", 170, 230);
				break;
			case 5:
								Set_Color(GUI_RED);
				Fill_Circle(230, 230,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(230, 230,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("5", 230, 230);
				break;
			case 6:
				Set_Color(GUI_RED);
				Fill_Circle(290, 230,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(290, 230,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("6", 290, 230);
				break;
			case 7:
				Set_Color(GUI_RED);
				Fill_Circle(170, 170,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(170, 170,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("7", 170, 170);
				break;
			case 8:
				Set_Color(GUI_RED);
				Fill_Circle(230, 170,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(230, 170,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("8", 230, 170);
				break;
			case 9:
				Set_Color(GUI_RED);
				Fill_Circle(290, 170,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(290, 170,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("9", 290, 170);
				break;
			case 10:							// A:+
				Set_Color(GUI_RED);
				Fill_Circle(350, 290,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(350, 290,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("+", 170, 350);
				break;
			case 11:							// B:-
				Set_Color(GUI_RED);
				Fill_Circle(290, 350,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(290, 350,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("-", 170, 350);
				break;
			case 12:							// C:=
				Set_Color(GUI_RED);
				Fill_Circle(350, 170,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(350, 170,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("x", 350, 170);
				break;
			case 13:							// D:AC
				Set_Color(GUI_RED);
				Fill_Circle(350, 230,20); 
				Delay(1000);
				Set_Color(GUI_GRAY);
				Fill_Circle(350, 230,20); 
				Set_Color(GUI_BLACK);
				Set_BkColor(GUI_WHITE);
				Disp_String("/", 350, 230);
				break;
			default:
				break;
			}
			key_number = 0x0f;
			Delay(50);
		}
}
}

五、实验结果:
结果显示一个矩形和16个圆形,圆形中间含有数字和运算符,背景色是绿色,字体黑色,圆形背景色是白色:
在这里插入图片描述

发布了9 篇原创文章 · 获赞 0 · 访问量 1208

猜你喜欢

转载自blog.csdn.net/weixin_43728903/article/details/103947656