单片机课程设计报告(硬件图、源程序).doc_第1页
单片机课程设计报告(硬件图、源程序).doc_第2页
单片机课程设计报告(硬件图、源程序).doc_第3页
单片机课程设计报告(硬件图、源程序).doc_第4页
单片机课程设计报告(硬件图、源程序).doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中原工学院单片机与接口技术课程设计报告 目录一、引言32、 设计任务33、 硬件电路图的设计54、 软件的编写10 1)程序流程图11 2)实验源程序15五、心得体会26六、参考文献27七、附录281、 引言 单片微型计算机简称单片机,又称微控制器(mcu),它的出现是计算机发展史上的一个重要的里程碑,它以体积小、功能全、性价比高等诸多优点独具特色,在工业控制、尖端武器、通信设备、信息处理、家用电器等嵌入式应用领域中独占鳌头。本次课设采用的stc89c51单片机是51系列单片机的一种代表,目前51系列单片机是国内目前应用最广泛的一种单片机之一。单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计的基础课。本次课程设计主要目的是为了更进一步学会使用和了解单片机,增强学生的动手能力,让我们更透彻的将平时所做的实验吃透学懂。2、 设计任务一、所需设备:伟福系列单片机仿真实验箱、pc机及实验指导书二、设计内容题目1:数据采集系统从键盘中任意选出6个键作为系统的功能键和led数码显示一起组成一个单片机键盘显示系统(小的监控程序),并通过实验箱上的接口芯片实现相应的功能(注:这些硬件电路全在实验箱上,但自己要能设计)。要求设计相应的硬件电路,并画出实现题目要求功能的流程图,编写、调试相应的程序。编程要求:开机后显示班级号(4位),学号(2位)(复位状态),然后通过功能键设置参数,而后运行主程序。6个功能键为:设定加一减一确定运行换位设置参数步骤:复位状态下,按下“设定”键后6位显示的状态为:显示设定值显示参数行号888801四位设定值中的某一位小数点亮(或者整个值闪烁),表示对该位进行设置。用“加一”、“减一”键改变该位的值,用“换位”键改变设置位(由左到右),用“确定”键保存设定的值。本次设计要求能设置四行参数即可,每行参数在09999之间,当连续按“确定”键时,对应的行号(上图)从0104循环变化。按下“运行”键,执行数据采集程序(参考实验箱相应的硬件电路,但要求不同),采集模拟量05v,显示对应的物理量在0000最大值之间变化。5v对应的显示值(最大值)是多少可以在设定时通过某行(四行参数中的一行)参数设置的数值选择确定。三、 硬件电路图的设计实验中主要用stc89c51单片机做处理器,首先的确保一个单片机最小系统,所以首先绘制的是单片机最小系统的电路图,下图是上次做小车时绘制的最小系统电路图: 要用到键盘和六个数码管显示,故需对其接口进行扩展,所用的器件有74hc138与p2口的高四位相连接,进行译码,译码之后和锁存器74ls373所存p0口的位数相与,对数码管的段码和位码进行片选选定,同时也可对键盘的读取接口和数据采集芯片进行片选选通,从而给定一个确定的地址,这样单片机就可以与外接电路进行数据的采集,键盘的判定,及数字的显示等工作。下图为74hc138的连接电路 其中p2.7接138的e3脚,e1和e2都接在低电平上,p2.6/ p2.5 /p2.4分别和138的c /b/ a引脚连接,这样地址片选就可以达到从8000h到ffff的地址。下图为单片机p0口接74ls373锁存器数码管段码接口和位码接口都用的是74ls374芯片,片选信号由138译码器和74ls373锁存器所给地址决定,键盘的读取用芯片74ls245芯片来扩展,本电路主要是参考平时所作实验,及实验的电路连接来设计的。下图为段码接口,位码接口及键盘读入口的接线电路:键盘及数码管显示电路设计好之后,接下来要设计的就是数据采集系统的电路,由于我选的题目是任务一里的第一个任务,所以数据采集系统使用的的是ad转换,将5v的电压通过电位器的调节,也就是模拟量通过ad0809芯片转换成数字量,在单片机上显示出来。下图即为ad0809与单片机的接口电路: ad0809其中d0d7与p0口相接,由p0口的数据选择哪一路的输入,eoc与单片机p3.2口相连接,转换完后产生中断延时让其显示,片选线由138的y1输出口和单片机的读口即p3.7经过一个或非门相连。这样0809的地址即为9000h,由p0口给定的值决定是in口口的输入,试验箱上只有两个输入口,我在编程时选定in0口输入,in0口接一个连了五伏电压的电位器。4、 软件的编写软件所要实现的功能:1、开机后显示班级、学号 10-2 12 ;2、用的是实验箱键盘最后一排的六个键,依次为:“设定” “加一 减一 换位” ”确定“ ”运行“;3、按“设定”键,默认第一位闪烁,此时按“加一”和“减一”键可以调整数值;4、设定完一位后,按“换位”键可以对下一位进行设定;5、四位都设定完之后,按“确定”键,去闪烁,并将参数01下设定的值保存;6、再按下“确定”键,跳至参数02,此时可以依照步骤3对其进行设置;7、参数01、02、03、04设定好之后,可以按“确定”键对设定的值查询;8、在不同的参数下,按下“运行”键可以将以该设定值最大值,0为最小值的ad转换结果显示到前四位数码管上。 明确软件所要达到的目的之后,首先得先清楚试验中数码管和键盘的读入地址和数码管的位码地址,为编程序确定键值及参数会起到一个直接的作用,只有清楚这些了才能随心所欲的设定没一个功能键的位置。(1) 程序流程图 流程图是一个程序的主干,也就是说程序是建立在一个流程图的主体框架之上的,有流程图程序才可以有条理的进行编写.下面为实验程序的流程图开始是运行键按下,调用ad转换子程序设置显示缓冲区,及各参数对应的参数缓冲区调用显示1,显示班级学号通过参数的系数,确定是哪个参数下设置的最大值将ad转换值通过和相对参数下设置的最大值进行比较,通过计算乘以相应的运算数,送入相应缓冲区调用键盘检测子程序右键按下?否?n判是运行键?调用显示子程序2,将数值显示,y n根据r5里相应的值确定是设置键还是确定键不是运行键根据r5里相应的值确定是设置键还是确定键调用不同子程序 是设置键,由参数得出显示缓冲区,第一位闪烁,调用显示子程序2调键盘检测,判断是换位键还是功能加减键是减键,直接到s22处,进行减1,送缓冲,调显示2是加键,直接跳到s11处,进行加1,送缓冲,调显示2是换位键,进行换位,送缓存,调显示2 跳转到键盘的判断 是运行键 调用ad转换 判断在哪个系数设置下惊醒的ad转换将ad转换的数字量与设置的数进行计算,分离出千位百位个位,通过比较将ad转换的最大值255转换为在相应参数下所设置的数,通过误差分析,加减相应的数字,已达到和设置数相近的值 将分离的四位数送缓存,调显示2跳转到键盘的判断 是确定键是第一次按下还是连续按下跳转到键盘的判断连续按下,依次改变参数,从1-4,循环改变 送缓存调显示2第一次按下,显示参数1,闪存停止闪烁,调显示2跳转到键盘的判断(2)实验源程序 wei equ 08002h ;位duan equ 08004h ;段in equ 08001h ;键盘读入口cs0809 equ 09000hledbuf equ 30h ;显示缓冲区canshu equ 51h ;参数1234org 0000h ljmp start org 0020hstart:mov 25h,#00h mov ledbuf,#01h ;班级、学号的序码 mov ledbuf+1,#00h mov ledbuf+2,#012h mov ledbuf+3,#02h mov ledbuf+4,#01h mov ledbuf+5,#02h mov 36h,#00h mov 40h,#00h ;参数1缓冲区 mov 41h,#00h mov 42h,#00h mov 43h,#00h mov 44h,#00h ;参数2缓冲区 mov 45h,#00h mov 46h,#00h mov 47h,#00hmov 48h,#00h ;参数3下缓冲区 mov 49h,#00h mov 4ah,#00h mov 4bh,#00h mov 4ch,#00h ;参数4下缓冲区 mov 4dh,#00h mov 4eh,#00h mov 4fh,#00h mov 50h,#00h mov canshu,#01h ;参数l2:mov r0,#ledbuf ;显示班级、学号 lcall displayled1 ;显示子程序,r0为参数 lcall testkey ;判断“有效键”是否按下? jnb 20h.0,l2 ;没有键按下,则继续显示班级、学号l3:mov 25h,#00h mov a,canshu mov b,#04h mul ab add a,#3ch ;将参数首地址存入r0 mov r0,a ;第一次有键按下默认显示参数1下设定的值,即:显示从40h单元开始的内容 lcall displayled2 ;调用设定参数显示子程序 lcall testkey ;检测是否有键按下 jnb 20h.0,l3 ;没有键按下,则继续显示参数1下设定的值 lcall paz ;有键按下,则判断运行键是否按下 cjne r5,#05h,qd1 ljmp sd ;r5=5qd1:ljmp s44 sd:setb 20h.1 mov 36h,#00h mov a,canshu mov b,#04h mul ab add a,#3ch ;通过参数来选择设定值的缓冲区 add a,36h mov r0,a mov 90h,r0 ;将闪值保存至90h单元 h1:mov a,canshu mov b,#04h mul ab add a,#3ch add a,36h mov r0,a ;r0指向闪烁寄存字节处 jb 20h.1,s1 mov r0,#10h setb 20h.1 ljmp ds1 s1:mov r0,90h ;将闪烁字节的值显示出来 clr 20h.1 ds1:mov a,canshu mov b,#04h mul ab add a,#3ch mov r0,a ;r0指向显示首区 lcall displayled2 lcall testkey jnb 20h.0,h1 lcall paz cjne r5,#02h,s11 ;换位 mov a,canshu mov b,#04h mul ab add a,#3ch add a,36h mov r0,a mov r0,90h inc 36hhw1:mov a,canshu mov b,#04h mul ab add a,#3ch add a,36h mov r0,a mov 90h,r0 mov a,36h cjne a,#04h,h1 mov 36h,#00h ljmp hw1s11:cjne r5,#04h,s22 ;加1 inc 70h ;闪烁值加1 mov a,90h cjne a,#0ah,h1 mov 90h,#00h ljmp h1s22:cjne r5,#03h,s33 ;减1 dec 70h ;闪烁值减1 mov a,70h cjne a,#0ffh,h2 mov 90h,#09h h2:ljmp h1s33:cjne r5,#01h,h2 ;确定1(去掉闪烁,并将该参数下的设定值保存到对应的缓冲区) mov a,canshu mov b,#04h mul ab add a,#3ch add a,36h mov r0,a mov r0,90h ljmp l3s44:cjne r5,#01h,w1 ;确定2(将参数加1,并将该参数下的设定值显示到数码管上) inc canshu ;参数加1,指向下一个参数 mov a,canshu cjne a,#05h,l22 mov canshu,#01h ljmp l3 w1:cjne r5,#00h,l22 yx:lcall ad ;采集(调用ad转换子程序,获得ad值) lcall testkey jb 20h.0,l22 ljmp yx ;运行l22:ljmp l3;判断有效按键子程序testkey:mov dptr,#wei mov a,#00h movx dptr,a ;6条列线全置0 mov dptr,#in movx a,dptr ;读入键状态(哪一排有键按下,则对应的位为:0) anl a,#01h ;若是最后一排有键按下,则anl之后a=0,否则a=1 cjne a,#01,b1 ;判断按下的是否是最后一排的键(有效按键)? clr 20h.0 ;a=1,则最后一排没有键按下,将20h.0清0 ljmp fh b1:setb 20h.0 ;a=0,则最后一排有键按下,将20h.0置1 fh:ret;判断键位,通过r5返回,运行-00h,确定-01h,换位-02h,减1-03h,加1-04h,设定-05h paz:mov r4,#0feh ;1111 1110b mov r5,#0ffh ;1111 1111bnext:mov dptr,#wei mov a,r4 movx dptr,a ;只将第6列置0 mov dptr,#in movx a,dptr ;读入键状态 anl a,#01h ;若“运行”键按下,则anl之后a=0; cjne a,#01h,qdz ;判断“运行”键是否按下?(依次判断最后一排的键) mov a,r4 rl a ;否,则左移一位 mov r4,a inc r5 ;执行后,r5=00h ljmp next qdz:inc r5 ;按下“运行”键,则跳至此处,执行后,r5=00h mov ledbuf,r5 ;若前面没有按“运行”键,则r5=01h;有,则r5=00hloop:lcall testkey jb 20h.0,loop ;有键按,则循环检测按键 ret;显示1子程序(班级、学号)displayled1:mov r2,#20h ;选通第1位数码管 mov r3,#06h ;6位数码管显示,控制循环6次 l1:mov dptr,#wei mov a,r2 movx dptr,a rr a ;右移一位,选通下一位数码管 mov r2,a mov a,r0 mov dptr,#ledtab movc a,a+dptr ;由序码求段码 mov dptr,#duan movx dptr,a ;输出段码 lcall delay ;调用延时 inc r0 ;指向下一个要显示的段码 djnz r3,l1 ret;显示2子程序(设定值和参数)displayled2:mov r2,#20h ;选通第1位数码管 setb 21h.0 ;将21h.0置1 mov r3,#06h ;6位数码管显示,控制循环6次 l12:mov dptr,#wei mov a,r2 movx dptr,a rr a ;右移一位,选通下一位数码管 mov r2,a cjne a,#02h,l44 ;没选通第五位数码管(0000 0010b),则跳转,正常显示 clr 21h.0 ;选通了第五位数码管,则将21h.0清0 l44:mov a,r0 mov dptr,#ledtab movc a,a+dptr ;由序码求段码 mov dptr,#duan movx dptr,a ;输出段码 lcall delay ;调用延时 jb 21h.0,h11 ;21h.0等于1,即没选通第五位数码管,则跳转 mov r0,#4fh ;选通了第五位数码管,则给r0初始地址4fh setb 21h.0 h11:inc r0 ;(50h)=00h,第五位数码管显示“0”;(51h)=01h,第六位数码管显示“1” djnz r3,l12 ;直到六位数码管都显示一遍,返回 ret;ad转换子程序ad:lcall pxs ;调系数 mov dptr,#cs0809 ;采集 mov a,#00h movx dptr,a jnb p3.2,$ :利用adc0809的eoc信号触发中断int0(p3.2口) movx a,dptr lcall zhuanhuan mov r0,#60h lcall displayled2 mov p1,#80h ret;判系数子程序 pxs:mov a,canshu mov b,#04h mul ab add a,#3ch mov r0,a mov r1,a mov a,r0 swap a inc r0 add a,r0 mov 53h,a inc r0 mov a,r0 swap a inc r0 add a,r0 mov 54h,a mov a,53h anl a,#0f0h cjne a,#00,dyyq mov 25h,#01h inc r1 mov a,r1 swap a inc r1 add a,r1 mov 53h,a inc r1 mov a,r1 swap a add a,#00 mov 54h,a dyyq:mov 57h,#02h mov 58h,#55h mov 55h,#00h mov 56h,#00h mov 22h,#00h mov r0,#0ffhloop5:inc r0 clr c mov a,56h add a,58h da a mov 56h,a mov a,55h addc a,57h da a mov 55h,a clr c mov a,56h subb a,54h mov 22h.0,c mov a,55h subb a,53h mov 22h.1,c mov r2,22h cjne r2,#00,next5 mov a,56h cjne a,54h,next5 inc r0next5:mov c,22h.1 jc loop5 mov 22h,#00h clr c mov b,r0 ret;转换子程序zhuanhuan:mul ab mov 6ah,b mov 6bh,a mov 6ch,#03h mov 6dh,#0e8h mov r0,#0ffh loop1:inc r0 ;判定千位 mov a,6bh mov 2bh,6bh subb a,6dh mov 6bh,a mov a,6ah mov 2ah,6ah subb a,6ch mov 6ah,a next1:jnc loop1 mov 60h,r0 mov 6ah,2ah mov 6bh,2bh mov 22h,#00h ;判定百位 clr c mov 6ch,#00h mov 6dh,#64h mov r0,#0ffh loop2:inc r0 mov a,6ah cjne a,#00h,bw1 mov a,6bh mov 2bh,6bh subb a,6dh mov 6bh,a ljmp next2 bw1:mov a,6bh subb a,6dh mov 6bh,a mov a,6ah subb a,6ch mov 6ah,a ljmp loop2 next2:jnc loop2 mov 61h,r0 mov 6bh,2bh mov 22h,#00h ;判定十位 clr c mov 6dh,#0ah mov r0,#0ffh loop3:inc r0 mov a,6bh mov 2bh,6bh subb a,6dh mov 6bh,a next3:jnc loop3 mov 62h,r0 mov 63h,2bh mov a,25h cjne a,#01h,tz1 mov 63h,62h mov 62h,61h mov 61h,60h mov 60h,#00h tz1:ret;延时子程序delay:mov r6,#06 d1:mov r7,#210 djnz r7,$ djnz r6,d1 ret ;显示字形ledtab:db 3fh,06h,5bh,4fh,66h ;01234 db 6dh,7dh,07h,7fh,67h ;56789 db 77h,7ch,39h,5eh,79h ;abcde db 71h,00h,76h,40h ;f灭h - end五、心得体会对于这次课设,总体感觉还可以,比上学期参加培训时学习单片机的效果好多了,上学期就在张老师的带领下在周末进行电子设计大赛培训,总结一下上学期的收获就是认识了结了单片机。这学期通过五月份的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论