资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
微机接口技术与应用课程设计 学校名称: 院系: 班级:小组成员: 一. 实验名称交通灯设计二. 实验目的用软件模拟交通灯并在硬件设备实现。三实验环境四实验说明 交通灯分南北向和东西,一边三个,分别是绿红黄,红绿黄灯交替有四种情况,依次为:0-东西绿灯,南北红灯 1-东西黄灯,南北红灯2-东西红灯,南北绿灯 3-东西红的,南北黄灯。当有黄灯亮时停顿1000s,其余的停顿2000s。五连接试验箱8255与28028f连接,PA0,PA1,PA2,PA3,PA4,PA5口分别与L0,L1,L2,5,L6,L7相连接。六实验代码 #include#include#include ApiExusb.h#pragma comment(lib,ApiExusb.lib)#include / 回调函数声明LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);/ 初始化窗口类声明BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName);/ 初始化窗口声明BOOL InitWindows(HINSTANCE hInstance, int nCmdShow, char *lpszClassName, char *lpTitle);WNDCLASS wndclass; / 定义一个窗口类HWND hwnd; / 定义一个窗口句柄int nNum=0; / 为灯的状态赋初值,记录交通灯的状态,0-东西绿灯,南北红灯 1-东西黄灯,南北红灯/2-东西红灯,南北绿灯 3-东西红的,南北黄灯int status4=0x21,0x11,0x0c,0x0a; /控制试验箱灯的状态POINT pt6=20,20,80,20,140,20,20,80,80,80,140,80; /六盏灯的圆心坐标上面为东西,下面为南北,从左到右依次为绿黄红int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)MSG Msg; / 定义消息char lpszClassName = 交通灯; / 窗口的类名char lpTitle = 基本绘图-交通灯; / 窗口标题名 if(!Startup()/*打开设备*/printf(ERROR: Open Device Error!n);return 0; /exit(0);printf(Enter any key will return:n);PortWriteByte(0x28b,0x80); /向控制口写命令,控制c口输出 / 初始化窗口类if (!InitWindowsClass(hInstance, lpszClassName)return FALSE;/ 初始化窗口if (!InitWindows(hInstance, nCmdShow, lpszClassName, lpTitle)return FALSE;/消息循环while(GetMessage(&Msg, NULL, 0, 0)TranslateMessage(&Msg);DispatchMessage(&Msg);Cleanup();/*关闭设备*/return Msg.wParam; / 程序终止时将信息返回系统/ 初始化窗口类定义BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName)/1、窗口类定义wndclass./ 窗口类型为默认类型wndclass.lpfnWndProc = WndProc; / 窗口处理函数为 WNDPROCwndclass.cbClsExtra = 0; / 窗口类无扩展wndclass.cbWndExtra = 0; / 窗口实例无扩展wndclass.hInstance = hInstance; / 当前实例句柄wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); / 窗口的最小化图标为默认图标wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); / 窗口采用箭头光标wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); / 窗口采用白色背景 wndclass.lpszMenuName = NULL; / 窗口中无菜单wndclass.lpszClassName = lpszClassName; /类名为 lpClassName/2、注册窗口类if (!RegisterClass(&wndclass) / 如果注册失败则发出警告声音MessageBeep(0);return FALSE;return TRUE;/ 初始化窗口声明BOOL InitWindows(HINSTANCE hInstance, int nCmdShow, char *lpszClassName, char *lpTitle)/3、创建窗口hwnd = CreateWindow(lpszClassName, lpTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, 600, 450, NULL, NULL, hInstance, NULL);/4、显示窗口ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);return TRUE; / 回调函数定义LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)HDC hDC; / 定义设备环境句柄HPEN hPen; / 定义画笔句柄HBRUSH hBrush; / 定义画刷句柄PAINTSTRUCT PtStr; / 定义包含绘制信息的结构体变量int R = 10;/ 定义圆的半径switch(message)case WM_KEYDOWN: /响应按键消息/-未完待续break; case WM_PAINT: / 处理绘图消息hDC = BeginPaint(hwnd, &PtStr); / 得到设备句柄SetMapMode(hDC, MM_ANISOTROPIC); / 设置映像模式SetWindowExtEx(hDC, 400, 300, NULL); / 设置窗口区域(逻辑单位)400,300SetViewportExtEx(hDC, 600, 450, NULL); / 设置视口区域(物理单位)SetViewportOrgEx(hDC, 200, 200, NULL); / 设置视口原点坐标为(300, 200)hPen = (HPEN)GetStockObject(BLACK_PEN);SelectObject(hDC, hPen);/ 绘制六盏交通灯外圆int i=0;if(statusnNum&0x20) hBrush = CreateSolidBrush(RGB(0, 255, 0); /东西为绿灯else hBrush = CreateSolidBrush(RGB(255, 255, 255); SelectObject(hDC, hBrush);Ellipse(hDC,pti.x-R,pti.y-R,pti.x+R,pti.y+R);i+; /东西为黄灯if(statusnNum&0x10) hBrush = CreateSolidBrush(RGB(255, 255, 0); else hBrush = CreateSolidBrush(RGB(255, 255, 255); SelectObject(hDC, hBrush);Ellipse(hDC,pti.x-R,pti.y-R,pti.x+R,pti.y+R);i+; /东西为红灯if(statusnNum&0x08) hBrush = CreateSolidBrush(RGB(255, 0, 0); else hBrush = CreateSolidBrush(RGB(255, 255, 255); SelectObject(hDC, hBrush); Ellipse(hDC,pti.x-R,pti.y-R,pti.x+R,pti.y+R);i+; /南北为绿灯if(statusnNum&0x04) hBrush = CreateSolidBrush(RGB(0, 255, 0); else hBrush = CreateSolidBrush(RGB(2
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号