资源描述
硬件课程设计报告 课题名称: 自动售货机 班 级: 计科2014-02班 姓 名: 周志星 学 号: 08143088 指导教师: 马海波 2016年12月27日目录摘要11.设计简介21.1设计步骤及要求 21.2设计题目21.3设计背景21.4面临问题21.5解决方案31.6设计思想32.设计任务及要求32.1实验目的32.2具体要求32.3使用硬件43.总体方案与说明43.1流程设计43.1.1系统程序模块43.1.2系统流程图44.硬件框图与说明54.1DAC0832芯片54.2可编程外围接口芯片8255A74.312864字符液晶显示器94.4可编程定时计数器8254 115.电路原理图与说明 135.18254定时电路 135.2LCD显示电路 145.3总的电路 146.软件流程图 147.实验代码及注释 158.结论与体会 188.1实验成果 188.1.1实验线路图 188.1.2实验结果 188.2实验体会 189.参考文献 18摘要在日常的生活中,为了方便人群,在人群活动较多的地方放置自动售货机,解决了人群的需求,自动售货机里包括多种商品,若需要购买货物,选择自己所需的商品,按下确定键,付款后及购买成功。通过使用自动售货机,解放了人力资源的同时,为人们提供了便利,同时由于自动售货机是集中调配,统一管理,使其成为新时期电子产品应用现实社会的体现之一。关键词 普通开关 8255A芯片 8254芯片 DAC0832芯片 LCD液晶显示器191 设计简介1.1设计步骤及要求课程安排1. 指导老师布置任务,学生选题2. 系统总体设计3. 系统硬件设计4. 系统调试5. 设计报告6. 检查、评定、总结1.2设计题目自动售货机1.3设计背景在日常的生活中,为了方便人群,在人群活动较多的地方放置自动售货机,解决了人群的需求,自动售货机里包括多种商品,若需要购买货物,选择自己所需的商品,按下确定键,付款后及购买成功。通过使用自动售货机,解放了人力资源的同时,为人们提供了便利,同时由于自动售货机是集中调配,统一管理,使其成为新时期电子产品应用现实社会的体现之一。1.4面临问题1.如何实时反应所购商品变化2.如何利用8254上升沿下降沿实现定时转动电机3.如何将商品显示在LCD显示屏上1.5解决方案1.利用8255A B口作为输入端口实时读取开关控制信息,即所购商品。2.将级联后的8254out1端口连至8255A输入口,通过读取输入口数据,判断8254处于高低点平状态。3.将汉字写入系统根据开关读取状态实时显示汉字在LCD液晶显示屏。1.6设计思想该系统通过8255A芯片的B口作为输入口,实时采集用户从开关输入的状态,当K2开关未闭合表示用户选择完毕,此时显示用户选择的商品,通过LCD液晶显示屏显示商品名称,并循环此过程,不断的显示用户选择的商品。8254芯片定时一秒,输出口通入8255A B口不断读取PB3位状态,在高电平时,实现跟踪,低电平时通过0832芯片给电机写FF电机转动。每一种商品对应一种转速。2 设计任务与要求 2.1实验目的1.复习8255芯片,8254芯片工作原理及使用方法2.学会使用12864字符液晶显示屏3.锻炼小规模逻辑电路设计4.提高分析、解决问题的能力22具体要求本系统需要实时提供用户购买商品服务,客户在通过K0,K1开关选择实验商品时,显示屏显示商品,按下K2键即确认购买键,电动机根据所选商品转动,不同商品为了区分,使其设置为不同的电动机转速。2.3使用硬件8255A芯片 8254芯片 DAC0832芯片 12864字符液晶显示器3 总体方案与设计说明3.1实验流程设计3.1.1系统程序模块图3-1系统程序模块3.1.2系统流程图图3-2系统流程图4 硬件框图与说明4.1DAC0832芯片1.概述DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。2.芯片结构图图4-1DAC0832结构图 *D0D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);* ILE:数据锁存允许控制信号输入线,高电平有效;* CS:片选信号输入线(选通数据锁存器),低电平有效;* WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;* XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;* WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。* IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;* IOUT2:电流输出端2,其值与IOUT1值之和为一常数;* Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;* Vcc:电源输入端,Vcc的范围为+5V+15V;* VREF:基准电压输入线,VREF的范围为-10V+10V;* AGND:模拟信号地;* DGND:数字信号地。4.2可编程外围接口芯片 8255A1.概述8255A是一种通用的可编程并行I/O接口芯片,它是为Intel系列微处理器设计配套电路,也可用于其他微处理器系统中。通过对它编程,芯片可工作于不同的工作方式。在微型计算机系统中,用8255A做接口时,通常不需要附加外部逻辑电路就可直接为CPU与外设之间提供数据通道,因此得到了极为广泛的应用。2.系统结构图图4-2 8255A系统结构图由图可见,8255A由数据端口A、B、C(期中,C口被分为C口上半部分和C口下半部分),A组和B组控制逻辑,数据总线缓冲器和读写控制逻辑。3.控制字8255A具有3种基本工作方式。方式0:基本输入输出方式;方式1:选通输入输出方式;方式2:双向总线I/O方式。端口A可以工作于3种方式中的任一种;端口B只能工作于方式0和方式1,而不能工作于方式2;端口C常被分成2个4位端口,除了用做输入输出端口外,还能用来配合A口和B口工作,为这两个端口的输入输出操作提供联络信号。4.工作方式方式0 基本输入输出方式,它适用于不需要应答信号的简单输入输出场合。A B C口适用方式1 选通输入/输出方式。在这种方式下,A口和B口作为数据口,均可用于输入或输出方式。A B口方式2 双向总线方式。A口4.3 12864字符液晶显示器 1.概述ST7920是台湾矽创电子公司生产的中文图形控制芯片,它是一种内置12864-12汉字图形点阵的液晶显示控制模块,用于显示汉字及图形12864A-1汉字图形点阵液晶显示模块集成ST7920驱动器,可显示汉字及图形,内置8192个中文汉字(1616点阵)、128个字符(816点阵)及64256点阵显示RAM(GDRAM)。2.系统结构外形如图图4-3 LCD显示屏系统结构图图4-4 LCD系统图3.工作原理12864液晶显示器工作于并行模式。8位数据线与8255A芯片8位数据口连接,控制口(E、R/W、D/I)与8255A芯片C口四位相连。通过8255A的8位数据空向12864液晶显示器传送数据,通过C口低四位传送控制信号。控制口E为使能端,高电位有效。R/W为读写控制,低点位为写数据、高电位为读数据。D/I为数据与命令口,低电位为命令、高电位为数据。将需要显示的地址通过数据口以命令的形式送入显示器,再将需要显示的数据通过数据口以数据的形式送入显示器,即可显示内容。表4-1 LCD汉字显示坐标X坐标Line180H81H82H83H84H85H86H87HLine290H91H92H93H94H95H96H97HLine388H89H8AH8BH8CH8DH8EH8FHLine498H99H9AH9BH9CH9DH9EH9FH图4-5 LCD中文字库截图4.4 可编程定时器计数器82541.概述 8254 芯片是一款使用十分广泛的可编程定时,计数芯片,其主要功能是定时和计数的功能。我们的微机内的动态存储器刷新电路,系统日时钟的技术以及发声系统的声源都是由8254芯片来完成的。2.系统结构图4-6 8254系统结构图数据总线缓冲器:数据总线缓冲器是一个三态、双向8位寄存器主要作用是与cpu进行数据交换,8位数据线D7D0与CPU的系统数据总线连接,构成CPU和8254之间信息传送的通道,CPU通过数据总线缓冲器向8254写入控制命令、计数初始值或读取计数值。读写逻辑:读写逻辑是芯片的控制部分,编程人员通过控制信号的选择来选择芯片的工作方式。读/写控制逻辑用来接收CPU系统总线的读、写控制信号和端口选择信号,用于控制8254内部寄存器的读/写操作。控制字寄存器:控制寄存器是一个只能写不能读的8位寄存器,系统通过指令将控制字写入控制寄存器,设定8254的不同工作方式。计数器:8254内部有三个结构完全相同而又相互独立的16位减“1”计数器,每个计数器有六种工作方式,各自可按照编程设定的方式工作。3.工作方式 (1)方式0:计数到0结束输出正跃变信号方式。(2)方式1:硬件可重触发单稳方式。(3)方式2:频率发生器方式。(4)方式3:方波发生器。(5)方式4:软件触发选通方式。(6)方式5:硬件触发选通方式。5 电路原理图与说明5.1 8254定时电路图5-1 8254定时电路5.2 LCD显示电路图5-2 LCD显示电路5.3 总的电路图5-3 系统总电路6 软件流程图图6-1 软件流程图7 实验代码及注释#include#include#include ApiExusb.h#pragma comment(lib,ApiExusb.lib)char lcd16 = 0xBF,0xC9,0xC0,0xD6,0x20,0x31;char lcd26 = 0xC2,0xF6,0xB6,0xAF,0x20,0x31;char lcd36 = 0xBA,0xEC,0xC5,0xA3,0x20,0x31;右转char lcd46 = 0xC4,0xCC,0xB2,0xE8,0x20,0x31;void clear();void cmdsetup();void datasetup();void main()byte data;int i;printf(Press any key to begin!nn);getch();if(!Startup()/*打开设备*/printf(ERROR: Open Device Error!n);return;/通道0工作方式3,初值1000 PortWriteByte(0x283,0x36);PortWriteByte(0x280,2000%256);PortWriteByte(0x280,2000/256);PortWriteByte(0x283,0x76);/通道2工作方式3,初值Out0PortWriteByte(0x281,1000%256);PortWriteByte(0x281,1000/256);/级联后的周期2秒clear();while(!kbhit() PortWriteByte(0x28b,0x82);/*设8255为方式0,C口输出,A口输出,B口输入*/ clear(); PortReadByte(0x289,&data);/从B口不断地读入数据 printf(%dn, data);PortWriteByte(0x290,0x00); if(!(data & 4) /判断B口输入数据 K2是否闭合 if(data = 0|data = 8) /根据K0 K1 由B口传入数据判断键值 四种 PortWriteByte(0x288,0x90); cmdsetup();Sleep(10);for(i = 0;i6;i+)PortWriteByte(0x288,lcd1i); datasetup(); else if(data = 1|data = 9) PortWriteByte(0x288,0x90); cmdsetup();Sleep(10);for(i = 0;i6;i+)PortWriteByte(0x288,lcd2i); datasetup(); else if(data = 2|data = 10) PortWriteByte(0x288,0x90); cmdsetup();Sleep(10);for(i = 0;i6;i+)PortWriteByte(0x288,lcd3i); datasetup(); else if(data = 3|data = 11) PortWriteByte(0x288,0x90); cmdsetup();Sleep(10);for(i = 0;i6;i+)PortWriteByte(0x288,lcd4i); datasetup(); else /键K2按下 开始电机转动 PortWriteByte(0x290,0x00);while(true)if(data & 8) /跟踪8254高电平 不断获取break;break;while(true) /低电平开始转动 并不断检测电平PortWriteByte(0x290,0x00);/由K0 K1 键值 给电动机一个转速 共四种转速if(!(data & 8)if(data = 4|data = 12)PortWriteByte(0x290,0xCC);else if(data = 5|data = 13)PortWriteByte(0x290,0xEE);if(data = 6|data = 14)PortWriteByte(0x290,0x51);if(data = 7|data = 15)PortWriteByte(0x290,0xFF);break;PortWriteByte(0x290,0x00);break; Cleanup();void clear() PortWriteByte(0x288,0x0c); cmdsetup();void cmdsetup() PortWriteByte(0x28a,0x00); Sleep(1); PortWriteByte(0x28a,0x04); Sleep(1); PortWriteByte(0x28a,0x00); Sleep(1); void datasetup() PortWriteByte(0x28a,0x01); Sleep(1); PortWriteByte(0x28a,0x05); Sleep(1); PortWriteByte(0x28a,0x01); Sleep(1);8 结论与体会8.1实验成果8.1.1实验线路图图8-1 实验线路图8.1.2实验结果 实现K0 K1 选择商品在LCD显示屏显示,而后,K2 闭合,控制电机转动,不同商品对应不同转速,转动1S。8.2实验体会 通过本次实验,复习了8255A 8254 0832的使用,更进一步的掌握硬件编程,切身实际的从开始,设计到结束,从编写各部分代码,到测试各部分,再到连接各部分硬件和各部分代码,再经过多次的测试完整代码,多次的测试实验仪器,最后完成本次实验。此次实验锻炼了自己动手设计分析,编写程序软件的能力,在将来的学习和工作中有很大的帮助。参考文献:1.周荷琴 吴秀清编著. 微型计算机原理与接口技术(第五版).合肥:中国科学技术大学出版社,2015.
展开阅读全文