版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机接口技术与应用课程设计 学校名称: 院系: 班级:小组成员: 一. 实验名称交通灯设计二. 实验目的用软件模拟交通灯并在硬件设备实现。三实验环境四实验说明 交通灯分南北向和东西,一边三个,分别是绿红黄,红绿黄灯交替有四种情况,依次为:0-东西绿灯,南北红灯 1-东西黄灯,南北红灯2-东西红灯,南北绿灯 3-东西红的,南北黄灯。当有黄灯亮时停顿1000s,其余的停顿2000s。五连接试验箱8255与28028f连接,PA0,PA1,PA2,PA3,PA4,PA5口分别与L0,L1,L2,5,L6,L7相连接。六实验代码 #include<stdio.h>#include<c
2、onio.h>#include "ApiExusb.h"#pragma comment(lib,"ApiExusb.lib")#include <windows.h>/ 回调函数声明LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);/ 初始化窗口类声明BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName);/ 初始化窗口声明BOOL InitWindows(
3、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; /六盏灯的圆心坐标
4、上面为东西,下面为南北,从左到右依次为绿黄红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; /e
5、xit(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)TranslateM
6、essage(&Msg);DispatchMessage(&Msg);Cleanup();/*关闭设备*/return Msg.wParam; / 程序终止时将信息返回系统/ 初始化窗口类定义BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName)/1、窗口类定义wndclass.style = 0; / 窗口类型为默认类型wndclass.lpfnWndProc = WndProc; / 窗口处理函数为 WNDPROCwndclass.cbClsExtra = 0; / 窗口类无扩展wndclass.cbW
7、ndExtra = 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; / 窗口中无菜单wndc
8、lass.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_O
9、VERLAPPEDWINDOW,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 P
10、tStr; / 定义包含绘制信息的结构体变量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); /
11、设置视口区域(物理单位)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, hBrus
12、h);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 = CreateSol
13、idBrush(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(255, 255, 255); SelectObject(hDC, hBrush);
14、 Ellipse(hDC,pti.x-R,pti.y-R,pti.x+R,pti.y+R);i+;/南北为黄灯if(statusnNum&0x02) 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&0x01) hBrush = CreateSolidBru
15、sh(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+;PortWriteByte(0x28a,statusnNum); if(kbhit()exit(0);if(statusnNum&0x02)|(statusnNum&0x10) /有黄灯亮,则睡1000,否则睡2000Sleep(1000); elseSleep(2000); nNum=(+nN
16、um)%4; /控制交通灯循环InvalidateRect(hwnd, NULL, 1); / 重绘窗口区域DeleteObject(hPen);DeleteObject(hBrush);EndPaint(hwnd, &PtStr);break;case WM_DESTROY:PostQuitMessage(0);default:return DefWindowProc(hwnd, message, wParam, lParam); return 0;七实验现象 试验箱上红绿灯与Win32执行出来的图形界面上的模拟红绿灯交替亮现象是同步的。八实验总结 在实验的过程中,出现头文件不存在的情况,解决的方法是在options->directory添加文件API_C的路径,试验箱启动不成功,检查连接情况,usb是否连接好,连线是否插紧或线是否是好的,一步步纠正了错误之后得到了想要结果,如实验现象中所描述的。进过此次实验,更加认识到基础知识的重要性,还有就是一定要经常动手,将所学的基础知识应用于实践中。以后会继续学习接口技术和嵌入式编程,以期取得更大的进步。 8 / 8文档可自由编辑打印
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上半年教师资格考试《中学综合素质》真题及答案
- 2024-2030年中国婚庆策划市场竞争力分析发展策略研究报告
- 2024-2030年中国地板抹布融资商业计划书
- 2024-2030年中国四连体无尘服商业计划书
- 2024年版施工劳务非材料供应承包合同版
- 2024年版零售商垫资协议样式版B版
- 2024年三旧改造建设项目合作协议书范本-智慧城市配套3篇
- 2024年小学二年级数学(北京版)-万以内数的加减法(二)-1教案
- 洛阳职业技术学院《视频编辑》2023-2024学年第一学期期末试卷
- 2025年德州货运从业资格模拟考试题
- 李孟潮个体心理咨询的操作
- 人工智能课题研究报告PPT模板
- 支气管镜吸痰操作标准
- 概率期末考试试题答案《概率论与数理统计B》
- 大学校园交通规划以南京林业大学为例
- 山东2023泰安银行春季校园招聘25人上岸提分题库3套【500题带答案含详解】
- GB/T 11446.9-2013电子级水中微粒的仪器测试方法
- GB 8537-2018食品安全国家标准饮用天然矿泉水
- GB 31247-2014电缆及光缆燃烧性能分级
- 斯伦贝谢智能完井工具介绍
- 百词斩-定语从句课件-(;)
评论
0/150
提交评论