输出一个简单的计算器:
一、实验目的:
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个圆形,圆形中间含有数字和运算符,背景色是绿色,字体黑色,圆形背景色是白色: