版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计姓名:系别:班级:学号:指导老师:硬件设计方案按键系统:依据题目设计要求,共需要16个键盘,所以,为减轻硬件端口负担,采用4*4键盘排列方式,只需要8个端口,为方便使用扩展一块8255芯片。8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。8255三种工作方式如下:方式0:基本的输入输出方式,即无须联络就可以直接进行的I/O方式。其中A、B、C口的高四位或低四位可分别设置成输入或输出。方式1:选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.方式2:双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。本设计中AT89C51和8255的接线如下:8255A接口分配如下表:PC0PC1PC2PC3PA40123PA54567PA689ABPA7CDEF键盘和8255接线如下图所示:键盘工作原理:判断键盘中有无键按下,将全部列线线PC口4位置低电平,然后检测行线PA口4位的状态。只要有一行的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有行线均为高电平,则键盘中无键按下。判断闭合键所在的位置,在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将列线置为低电平,PC0先为低电平,其他线为高电平,第一次扫描;PC1为低电平,其他线为高电平,第二次扫描,如此遍历,即在置某根列线为低电平时,其他线为高电平,在确定某根列线位置为低电平后,再逐行检测各行线的电平状态,若某行为低,则该列线与置为低电平的行线交叉处的按钮就是闭合的按键。键盘扫描程序流程如图2显示系统:依据题目设计要求,共需要6个显示单元,所以,采用6个独立LCD显示单元,为节约通信端口,采用串口扩展为每个单元配备4094元件单元。CD4094和74LS164是一个8位串行输入和并行输出的同步移位寄存器。CD4094移位寄存器是从Q0移向Q7的,而串口送出的数据依次从低位到高位。因而最后CD4094送出的代码:QO(D7)、Q1(D6)、Q2(D5)、Q3(D4)、Q4(D3)、Q5(D2)、Q6(D1)、Q7(D0),所以与原来的共阴和共阳代码是相反的。CD4094的2号脚为数据输入端(DATA)与RXD相连CD4094的3号脚为同步脉冲输入端(CLK)与TXD相连CD4094的1号脚为控制端,这里与P1.0相连。若STB=0,则8位并行数据输出关闭,但允许串行数据从DATA输入;若STB=1,则DATA输入端关闭,但允许8位数据并行输出。CD4094的15号脚为使能端(OE),高电平时CD4094才能工作。CD4094的9号脚(QS)状态与Q7一样,但不受STB控制。所以在传送数据时只要后极的DATA接前极的QS相接就可以了。连线如下图:显示单元如下所示:(LCD采用的是7SEG-COM-CAT-GRN)显示系统工作原理如下:7SEG-COM-CAT-GRN表:数值:0123456码值:00H01H02H03H04H05H06H数值:789ABCD码值:07H08H09H0AH0BH0CH0DH数值:EF_HL码值:0EH0FH10H11H13H工作流程:6个显示单元(时—分)分别对应:35H—30H地址每次把上面的码传给相应的单元,并调用显示程序:DISP刷新LCD显示出相应值。一:硬件电路图
二、汇编程序清单#include"reg51.h"#include"absacc.h"#defineucharunsignedchar#definePAXBYTE[0x7cff]#definePBXBYTE[0x7dff]#definePCXBYTE[0x7eff]#defineP_8255XBYTE[0x7fff]sbitP1_0=P1^0;sbitP3_5=P3^5;sbitP3_4=P3^4;uchart0=16,t1=17,t2=18,t3=19,t4=20,t5=21;ucharh=0,f=0,s=0,k=50,label=0,a=0;ucharspSHOW[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0xfc,0x1c,0x1c,0x9e,0x6e,0x10};uchartimer[6]={0xfc,0xfc,0xfc,0xfc,0xfc,0xfc}; uchargetkey();ucharkey=0;voiddelay(inti);voiddisplay(); //voidstartDisplay(); voidsetHour(); voidsetMinute(); voidsetSecond();main(){TMOD=0x01;EA=1;ET0=1;//TR0=1;TH0=0x9d;TL0=0x90;SM0=0;SM1=0;P_8255=0x90;while(1){key=getkey();if(key<10) { if(label==0) t0=key; elseif(label==4) t4=key; elseif(label==2) t2=key; elseif(label==5) t5=key; elseif(label==3) t3=key; elseif(label==1) t1=key; } switch(key){ case10:setHour();break; case11:setMinute();break; case12:setSecond();break;case13:TR0=1;break;case14:TR0=0;break;case15:t0=0;t1=0;t2=0;t3=0;t4=0;t5=0;h=0;f=0;s=0;k=50;break;default:break;}delay(10);display(); if(t0==0&&t5==0) P3_5=~P3_5; P3_4=~P3^4;}}uchargetkey(){ucharj=0,l=0,m=0,key=0;uchari=0;PC=0x00;if(PA!=0xff){delay(13);}PC=0x00;if(PA!=0xff){l=0xf7;m=PA;m=m&0xf0;//key=m;PC=0xf7;for(i=0;i<4;i++){if(PA!=0xff){l=l&0x0f;key=l+m;break;}PC=PC>>1;l=l>>1;}}switch(key){case0xee:j=0;break;case0xed:j=1;break;case0xeb:j=2;break;case0xe7:j=3;break;case0xde:j=4;break;case0xdd:j=5;break;case0xdb:j=6;break;case0xd7:j=7;break;case0xbe:j=8;break;case0xbd:j=9;break;case0xbb:j=10;break;case0xb7:j=11;break;case0x7e:j=12;break;case0x7d:j=13;break;case0x7b:j=14;break;case0x77:j=15;break;/*case0xef:j=0;break;case0xdf:j=1;break;case0xbf:j=2;break;case0x7f:j=3;break;*/default:j=0xff;break;}returnj;}voiddisplay(){inti=0;timer[0]=spSHOW[t0];timer[1]=spSHOW[t1];timer[2]=spSHOW[t2];timer[3]=spSHOW[t3];timer[4]=spSHOW[t4];timer[5]=spSHOW[t5];P1_0=0;for(i=0;i<6;i++){SBUF=timer[i];while(!TI);TI=0;}P1_0=1;}voiddelay(inta){inti,j;for(i=0;i<a;i++)for(j=0;j<200;j++);}voidtime()interrupt1{k--;if(k==0){s++;t0=s%10;t1=s/10;k=1;}if(s==60){s=0;f++;t2=f%10;t3=f/10;}if(f==60){f=0;h++;t4=h%10;t5=h/10;h=h%24;}TH0=0x9d;TL0=0x90;}voidsetHour(){ a=a%2;//a作为区分小时的十位与各位,以下的a同理; TR0=0;// label=getKey(); if(a==0) label=4; else label=5; a++;}voidsetMinute(){ a=a%2; TR0=0; if(a==0) label=2; else label=3; a++;}voidsetSecond(){ a=a%2; TR0=0; if(a==0) label=0; else label=1; a++;}/*voidstartDisplay(){inti=0;timer[0]=0x40;timer[1]=0x76;timer[2]=0x79;timer[3]=0x38;timer[4]=0x38;timer[5]=0x3F;P1_0=0;for(i=0;i<6;i++){SBUF=timer[i];while(!TI);TI=0;}P1_0=1;}*/三丶课程设计的心得体会这次单片机课程设计我们历时两个星期,经过这两个星期的实践和体验下来,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!没想到这项看起来不需要多少技术的工作却是非常需要耐心和精力在两个星期后的今天我已明白课程设计对我来说的意义,它是让我们把
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 高中信息技术数据与计算之 Python 的机器学习模型模型融合评估课件
- 2026年碳关税贸易合同责任界定条款设计与谈判要点
- 2026年反向抵押房产日常维护与防灾防损实务
- 2026年候选药剂型规格制剂处方与参照药一致性原则
- 2026年数据交易所会员合规审计管理办法
- 2026年康复医院外骨骼机器人科室建设指南
- 2026年第二代刀片电池闪充技术产业化应用
- 2026年造林碳汇项目方法学适用条件与开发实务
- 2026浙江温州瓯海区三垟街道社区卫生服务中心面向社会招聘工作人员1人备考题库【综合卷】附答案详解
- 2026天津铁路建设投资控股(集团)有限公司招聘1人备考题库及完整答案详解【全优】
- 2026黑龙江新高考:语文必背知识点归纳
- 金属非金属地下矿山人行梯子间设置细则
- 领导干部任前法律法规知识考试题库(2025年度)及答案
- 2025福建厦门航空有限公司招聘备考题库及答案详解(易错题)
- 村集体三资管理培训课件
- (正式版)DB61∕T 2115-2025 《中深层地热能开发钻完井技术规程》
- 年鉴编纂基本知识课件
- 2026年保安员证考试题库完整版
- 2026年四川单招语数英基础提升分层试卷含答案适配不同水平
- 仰卧起坐课件
- 2025考研中共党史党建学真题(浙江省委党校)
评论
0/150
提交评论