课程设计(论文)-基于单片机计数器及出租车计费器.doc_第1页
课程设计(论文)-基于单片机计数器及出租车计费器.doc_第2页
免费预览已结束,剩余25页可下载查看

下载本文档

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

文档简介

基于mcu的计数和计程车计费器题目:基于mcu的计数和计程车计费器任务:11 外部脉冲自动计数,自动显示。111设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。112设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。12 设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元) 硬件资源:89s51芯片3-8译码器74hc138共阴极数码管脉冲信号发生器10k电阻若干硬件资源介绍: 利用89s51芯片为设计的主体,通过p2口的前三位(p2.0,p2.1,p2.2)通过3-8译码器进行译码,从而控制位选,在利用p0口进行段选,从而在数码管上显示所需要的数字。二、设计过程1.设计255计数器利用t1定时器的第二工作方式2,c/t为1,利用其计数功能,当计数到255后,下一位自动变成0(自动重装初值的功能)软件设计c语言:#includereg52.hunsigned char code num_table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char code bit_table6=0x00,0x01,0x02,0x03,0x04,0x05;unsigned char num;void display();void delay(unsigned int aa);void init_timer()/进行定时器的初始化tmod=0x60;th1=0;tl1=0x00;tr1=1;/tf1=0;void main() p2 = 0xff;p0 = 0x00; init_timer();while(1)num=tl1;display();delay(1);/*-显示函数-*/void display()unsigned char x,y,z; x=num%10;y=(num%100)/10;z=num/100;p2=0x02;p0=num_tablez;delay(1);p2=0x01;p0=num_tabley;delay(1);p2=0x00;p0=num_tablex;delay(1);void delay(unsigned int aa)unsigned int i,j;for(i=0;iaa;i+)for(j=0;j110;j+);汇编:org 0000hljmp mainorg 0030hmain: mov tmod, #60h ;初始化 setb tr1 mov a,tl1 lcall bcd lcall display ljmp mainbcd:mov b,#64h div ab mov 72h,a xch a,b mov b,#0ah div ab mov 71h,a mov 70h,b retdisplay:mov r1,#70h ;显示模块 mov r5,#00h loop1:mov a,r5mov p2,a mov dptr,#tab mov a,r1 movc a,a+dptr mov p0,a lcall delay inc r1 inc r5 cjne r5,#03h,loop1 retdelay:mov r6,#4 d1: mov r7,#248 djnz r7,$ djnz r6,d1 rettab:db 03fh,006h,05bh,04fh,66h,6dh,7dh,007h,7fh,6fhendprotues仿真结果2. 050000计数 利用t1定时器的工作方式1进行计数,当tl1=0时表示没有有效脉冲的输入,当tl1=1时,通过间接的函数对计数进加1,同时利用动态显示的功能在数码管上显示出来。软件设计:c语言#includeunsigned int code num_table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char code bit_table6=0x00,0x01,0x02,0x03,0x04,0x05;unsigned int num=100;unsigned int i,j,k,x,y,z;void bcd();void display();void delay(unsigned int aa)unsigned char i,j;for(i=0;iaa;i+)for(j=0;j110;j+);/*-系统初始化-*/void init()tmod=0x50;th1=0x00;tl1=0x00;tr1=1;/x=0;y=0,z=0;/display();while(1)if(tl1!=0x00)bcd();display();void bcd()tl1=0;num+;void display()if(num=50000)num=0; i=num/100000;j=num/10000%10;k=num/1000%10;x=num/100%10;y=num/10%10;z=num%10;p2=0x05;p0=num_tablei;delay(1);p2=0x04;p0=num_tablej;delay(1);p2=0x03;p0=num_tablek;delay(1);p2=0x02;p0=num_tablex;delay(1);p2=0x01;p0=num_tabley;delay(1);p2=0x00;p0=num_tablez;delay(1);void main()init();汇编:org 0000hljmp mainorg 0030h mov 70h,#00h mov 71h,#00h mov 72h,#00h mov 73h,#00h mov 74h,#00h mov 75h,#00hmain:mov tmod,#50h mov tl1,#00h setb tr1 lcall display mov a,tl1 jz main lcall bcd ljmp maindisplay:mov r1,#70h mov r5,#00h loop1:mov a,r5mov p2,amov a,r1mov dptr,#tabmovc a,a+dptrmov p0,alcall delayinc r5inc r1cjne r5,#06h,loop1retbcd:mov tl1,#00h mov r1,#70h mov r0,#75hloop2:mov a,r1 inc acjne a,#0ah,loop4mov r1,#00h inc r1 cjne r1,#76h,loop2 ljmp loop3 loop4:mov r1,a loop3:retdelay:mov r6,#4 d1: mov r7,#248 djnz r7,$ djnz r6,d1 rettab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhendprotues仿真结果:3.出租车计费器利用t1定时器的工作方式1,当tl1=0时表示没有有效脉冲的输入,当tl1=1时通过间接的函数对计数进加1,tl1清零;起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)软件设计c语言:#includeunsigned char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;unsigned char code table2=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned int w,x,y,z,i,j,k,km,money;void delay(unsigned int aa);void init();void bcd();void display1();void display2();/*-主函数-*/void main()init();void delay(unsigned int aa)unsigned char m,n;for(m=0;maa;m+)for(n=0;n110;n+);/*-初始化函数-*/void init()tmod=0x50;th1=0x00;tl1=0x00;tr1=1;km=0;money=50;/display1();/display2();while(1)while(tl1=0x00)/动态扫描display1();display2();km+;bcd(); /*-出租车的计费系统进行设置-*/ void bcd()tl1=0x00;if(km9)money=50;km=0;else;display1();delay(1);display2();void display1()/显示里程w=km/1000;x=km/100%10;y=km/10%10;z=km%10;p2=0x07;p0=table2w;delay(1);p2=0x06;p0=table2x;delay(1);p2=0x05;p0=table1y;/这一位后有小数点delay(1);p2=0x04;p0=table2z;delay(1);void display2()/显示费用i=money/100;j=money/10%10;k=money%10;p2=0x02;p0=table2i;delay(1);p2=0x01;p0=table1j;/这一位后有小数点delay(1);p2=0x00;p0=table2k;delay(1);汇编:org 0000hsjmp mainorg 0030h mov 70h,#00h mov 71h,#00h mov 72h,#00h mov 73h,#00h mov 74h,#00h mov 75h,#00hmain: mov tmod,#50h mov tl1,#00h setb tr1loop:mov r3,#00h mov a,tl1 jz loop lcall bcd lcall momey lcall displaybcd: inc r3 mov tl1,#00h mov a,r3 mov b,#0ah div ab mov 70h,bzzz: cjne a,#0ah,loop1 inc r4 mov r3,#00h mov 72h,r4 retloop1: mov 71h,a ;sjmp bcd retmoney:cc: cjne r3,#14h,loop2l2: mov a,70h xrl a,#00h jz loop5 xrl a,#05h jz loop5loop5: add a,#08h mov r5,a retloop2: jb cy,l1 jnb cy,l2l1: retdisplay: mov p2,#00hmov dptr,#tab2mov a,70hmovc a,a+dptrmov p0,aacall delaymov p2,#01hmov dptr,#tab1mov a,71hmovc a,a+dptrmov p0,aacall delaymov p2,#02hmov dptr,#tab2mov a,72hmovc a,a+dptrmov p0,aacall delaymov p2,#03hmov dptr,#tab2mov a,73hmovc a,a+dptrmov p0,aacall delaymov p2,#04hmov dptr,#tab1mov a,74hmovc a,a+dptrmov p0,aacall delay mov p2,#05hmov dptr,#tab2mov a,75hmovc a,a+dptrmov p0,aacall delayretdelay:mov r4,#10loop2:mov r5,#100loop3:djnz r5,loop3djnz r4,loop2rettab1 :db 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xeftab2 :db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f end仿真结果protues三硬件实现1. 0255计数器程序:#includereg52.hunsigned char code table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char code bit_table6=0x00,0x01,0x02,0x03,0x04,0x05;unsigned char num,flag;void display();void delay(unsigned int aa);sbit dula=p26;sbit wela=p27;/sbit d=p35;sbit d1=p10;/*-系统初始化-*/void init_timer()tmod=0x61;th1=0x00;tl1=0x00;tr1=1;th0=-50000/256;tl0=-50000%256;et0=1;tr0=1;ea=1;/tf1=0;void main() /p2 = 0xff;/p0 = 0x00; init_timer();while(1)num=tl1;display();delay(1);void display()unsigned int bai,shi,ge;bai=num/100;shi=num%100/10;ge=num%10;wela=1;p0=0xfe;wela=0;p0=0x00;dula=1;p0=tablebai;dula=0;p0=0xff;delay(1);wela=1;p0=0xfd;wela=0;p0=0x00;dula=1;p0=tableshi;dula=0;p0=0xff;delay(1);wela=1;p0=0xfb;wela=0;p0=0x00;dula=1;p0=tablege;dula=0;p0=0xff;delay(1);void delay(unsigned int aa)unsigned int i,j;for(i=0;iaa;i+)for(j=0;j110;j+);void quf() interrupt 1if(flag=0)d1=0;flag=1;elsed1=1;flag=0;th0=-50000/256;tl0=-50000%256;硬件实现图:2. 050000计数器程序:#includeunsigned int code table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char code bit_table6=0x00,0x01,0x02,0x03,0x04,0x05;sbit dula=p26;sbit wela=p27;unsigned int num=0,flag;sbit d1=p10;unsigned int i,j,k,x,y,z;void bcd();void display();void delay(unsigned int aa)unsigned char i,j;for(i=0;iaa;i+)for(j=0;j110;j+);/*-系统初始化-*/void init()tmod=0x51;th1=0x00;tl1=0x00;tr1=1;th0=-5000/256;tl0=-5000%256;et0=1;tr0=1;ea=1;x=0;y=0,z=0;display();while(1)if(tl1!=0x00)bcd();display();void bcd()tl1=0;num+;void display()if(num=50000)num=0; i=num/100000;j=num/10000%10;k=num/1000%10;x=num/100%10;y=num/10%10;z=num%10;wela=1;p0=0xfe;wela=0;p0=0x00;dula=1;p0=tablei;dula=0;p0=0xff;delay(1);wela=1;p0=0xfd;wela=0;p0=0x00;dula=1;p0=tablej;dula=0;p0=0xff;delay(1);wela=1;p0=0xfb;wela=0;p0=0x00;dula=1;p0=tablek;dula=0;p0=0xff;delay(1);wela=1;p0=0xf7;wela=0;p0=0x00;dula=1;p0=tablex;dula=0;p0=0xff;delay(1);wela=1;p0=0xef;wela=0;p0=0x00;dula=1;p0=tabley;dula=0;p0=0xff;delay(1);wela=1;p0=0xdf;wela=0;p0=0x00;dula=1;p0=tablez;dula=0;p0=0xff;delay(1);void main()init();void quf() interrupt 1if(flag=0)d1=0;flag=1;elsed1=1;flag=0;th0=-5000/256;tl0=-5000%256;硬件实现图:3.出租车计费器程序:#includeunsigned char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;unsigned char code table2=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned int w,x,y,z,i,j,k,km,money,flag,num;sbit dula=p26;/段选sbit wela=p27;/位选sbit d1=p10;void delay(unsigned int aa);void init();void bcd();void display();/*-主函数-*/void main()init();void delay(unsigned int aa)unsigned char m,n;for(m=0;maa;m+)for(n=0;n110;n+);/*-初始化函数-*/void init()tmod=0x50;th1=0x00;tl1=0x00;tr1=1;km=0;money=50;th0=-50000/256;tl0=-50000%256;et0=1;tr0=1;ea=1;while(1)while(tl1=0x00)/动态扫描display();km+;bcd(); /*-出租车的计费系统进行设置-*/ void bcd()tl1=0x00;if(km=20)/2km以内 起步价5元money=50;display();else/2km后0.8元/0.5km且每500米计费刷新一次if(km%10)%5=0)money=money+8;else;display();/*-*/void display()/显示函数w=km/1000;x=km/100%10;y=km/10%10;z=km%10;i=money/100;j=money/10%10;k=money%10;wela=1;p0=0xfe;wela=0;p0=0x00;dula=1;p0=table2x;dula=0;p0=0xff;delay(1);wela=1;p0=0xfd;wela=0;p0=0x00;dula=1;p0=table1y;dula=0;p0=0xff;delay(1);/这位后有小数点wela=1;p0=0xfb;wela=0;p0=0x00;dula=1;p0=table2z;dula=0;p0=0xff;delay(1);wela=1;p0=0xf7;wela=0;p0=0x00;dula=1;p0=t

温馨提示

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

评论

0/150

提交评论