单片机原理及其应用课程设计报告.docx_第1页
单片机原理及其应用课程设计报告.docx_第2页
单片机原理及其应用课程设计报告.docx_第3页
单片机原理及其应用课程设计报告.docx_第4页
单片机原理及其应用课程设计报告.docx_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理及应用课程设计报告班级:电气工程1203学号:12401710612姓名:刘龙江指导教师:刘剑成绩:单片机课程设计报告一、 设计任务 11 外部脉冲自动计数,自动显示。(PROTEUS仿真) 设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。 设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。12 设计一个出租车计费系统:(开发板硬件验证) 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)二、 设计内容1、 (1)255计数器设计思路由于255刚好能用八位二进制数表示,所以本设计可直接采用重装载的计数器T1模式二进行计数。然后对TL1的内容进行相应的十六进制转换十进制,首先TL1的内容除以64H,所得的商就是十进制的百位,然后用余数除以OAH,所得的商就是十进制的十位,余数即相应的十进制的个位。接着将相应的十进制数进行译码并在数码管上显示出来。每来一个脉冲其显示的结果加一,直至加到255然后T1重新开始计数。(2)主程序如下:ORG 0000H LJMP START ORG 0030HSTART:MOV SP,#60H;初始化系统 MOV TMOD,#60H;设置计数器1的工作方式2 MOV TH1,#0FFH;给高位赋值 MOV TL1,#0FFH;给地位赋值 SETB TR1;启动计数器1进行加计数 SETB ET1;开计数器T1溢出中断 SETB EA;开CPU总中断 MOV DPTR,#TAB;建表 MAIN:MOV A,TL1 MOV B,#64H DIV AB ;A为百位,商存在A,余数存放在B中 MOV 30H,A MOV A,B MOV B,#0AH ;0AH=10 DIV AB MOV 31H,A ;A为十位,B为个位 MOV 32H,B LCALL DISPLAY JNB TF1,MAIN SJMP MAIN DISPLAY: SETB P2.6 ;百位的段选 CLR P2.7 MOV A,32H MOVC A,A+DPTR MOV P0,#02H MOV P0,A ;输到P0中 LCALL L1 SETB P2.7 ;百位的位选 CLR P2.6 MOV P0,#0FFH SETB P2.6 ;十位的段选 CLR P2.7 MOV A,31H MOVC A,A+DPTR MOV P0,#01H MOV P0,A ;输到P0中 LCALL L1 MOV P0,#0FFH SETB P2.7 ;十位的位选 CLR P2.6 MOV P0,#0FFH SETB P2.6 ;个位的段选 CLR P2.7 MOV A,30H MOVC A,A+DPTR MOV P0,#00H MOV P0,A ;输到P0中 LCALL L1 SETB P2.7 ;个位的位选 CLR P2.6 MOV P0,#0FFH RET L1:MOV R7,#01H ;延时程序,延时1ms DEL:MOV R6,#248 DJNZ R6,$ DJNZ R7,DEL RET TAB:DB 3FH,06H,5BH,4FH,66H ; 0到9的共阴极数码管的段码表 DB 6DH,7DH,07H,7FH,6FH(3)仿真图2、2、(1)50000计数器的设计思路50000的计数器可以重新设置初值,用定时器0的工作方式1时把其设计为一个脉冲溢出一次,然后进行加一运算,先看个位,为10进1,十百千也是一样。到最高位的值大于10时,清零重新开始。(2)主程序如下: #include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换sbit LATCH1=P26;/定义锁存使能端口 段锁存sbit LATCH2=P27;/ 位锁存unsigned char code DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量void Delay(unsigned int t); /函数声明void Display(unsigned char FirstBit,unsigned char Num);/*- 主函数-*/main() unsigned int num=0; unsigned int j; while(1) j+; if(j=10) /检测当前数值显示了一小段时间后,需要显示的数值 -1,实现数据显示的变化 j=0; if(num50000)/用于显示09999 num+; else num=0; TempData0=DuanManum/10000;/分解显示信息,如要显示68,则68/10=6 68%10=8 TempData1=DuanMa(num%10000)/1000; TempData2=DuanMa(num%10000)%1000)/100; TempData3=DuanMa(num%10000)%1000)%100/10; TempData4=DuanMa(num%10000)%1000)%100%10; Display(2,5); /*- 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned char Num) unsigned char i; for(i=0;iNum;i+) DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); / 扫描间隙延时,时间太长会闪烁,太短会造成重影 (3)仿真图3、 出租车计费系统 (1)设计思路:起步价为5元(2km以内),2km后,0.8元/0.5km;每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)。原理:计数器每计数100个外脉冲就产生中断,里程加一百米,大于两千米百位就和0.5比较,如果相等就调用价格计算子程序,价格加0.8元,然后返回中断,调用里程和价格显示子程序。(2)、主程序如下:#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换sbit LATCH1=P26;/定义锁存使能端口 段锁存sbit LATCH2=P27;/ 位锁存unsigned char code DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量unsigned int num=0;void Delay(unsigned int t); /函数声明void Display(unsigned char FirstBit,unsigned char Num);void zh(unsigned int money,unsigned int km) TempData0=DuanMamoney/1000;/分解显示信息,如要显示68,则68/10=6 68%10=8 TempData1=DuanMa(money%1000)/100; TempData2=DuanMa(money%1000)%100)/10|0x80; TempData3=DuanMa(money%1000)%100)%10; TempData4=DuanMakm/1000; TempData5=DuanMa(km%1000)/100; TempData6=DuanMa(km%1000)%100)/10|0x80; TempData7=DuanMa(km%1000)%100)%10;void InitINT(void) EA=1; /全局中断开 EX0=1; /外部中断0开 IT0=1; /边沿触发 EX1=1; /外部中断1开 IT1=1; /IT1=1表示边沿触发/*- 主函数-*/void main() unsigned int money=0;unsigned int km=0;InitINT(); while(1) if(0num)&(num4)money=50+(num-4)*8;elsemoney=0;km=0;km=num*5; zh(money,km); Display(0,8); /*- 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);void DelayUs2x(unsigned char t) while(-t);void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned char Num) unsigned char i; for(i=0;iNum;i+) DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); / 扫描间隙延时,时间太长会闪烁,太短会造成重影 void ISR_INT0() interrupt 0DelayMs(60); num+;void ISR_INT1() interrupt 2 DelayMs(60);num=0;(3)仿真图实物图三、 心得体会 作为一名电气工程专业大三的学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。再以度过的的大学时光里,我们大多数接触的是专业课,我们在课堂上仅仅掌握的是专业的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。通过这几天的试训,使我的感触很深,真实“条条大

温馨提示

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

评论

0/150

提交评论