找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3655|回复: 3
打印 上一主题 下一主题
收起左侧

出租车计费仿真原理图+单片机源程序

[复制链接]
跳转到指定楼层
#
出租车计费仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. unsigned code num[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  4. unsigned char data x_pos, y_pos;
  5. sbit rs=P2^0;
  6. sbit  rw=P2^1;
  7. sbit  e=P2^2;

  8. sbit Control=P3^5;
  9. bit  swit_flg=0;

  10. unsigned char time,minte,second;
  11. unsigned char result;

  12. void delay_ms(unsigned char ms)
  13. {   unsigned int i,j;
  14.     for(i=ms;i>0;i--)
  15.         {
  16.           for(j=200;j>0;j--);
  17.           for(j=102;j>0;j--);
  18.           }
  19. }

  20. void busy(void)
  21. {
  22.     unsigned char i;
  23.         P0=0xff;
  24.         rs=0;
  25.         rw=1;
  26.         e=1;
  27.         for(i=0;i<20;i++)
  28.            if((P0&0x80)==0) break;
  29.         e=0;
  30. }
  31. void  LcdWD(unsigned char d)
  32. {
  33.     busy();
  34.         rs=1;
  35.         rw=0;
  36.         P0=d;
  37.         e=1;
  38.         _nop_();       
  39.         e=0;
  40. }
  41. void LcdWC(unsigned char c)
  42. {
  43.     busy();
  44.         rs=0;
  45.         rw=0;
  46.         P0=c;
  47.     e=1;
  48.         _nop_();
  49.         e=0;
  50. }
  51. void LcdInit(void)
  52. {
  53.     LcdWC(0x38);     //显示模式设置
  54.         delay_ms(3);         //延时3ms
  55.     LcdWC(0x38);
  56.         delay_ms(3);
  57.         LcdWC(0x38);
  58.         delay_ms(3);
  59.         LcdWC(0x38);
  60.         delay_ms(3);

  61.         LcdWC(0x08);   //显示关闭
  62.         LcdWC(0x01);   //清屏       
  63.         delay_ms(3);

  64.         LcdWC(0x06);   //显示光标移动设置
  65.         LcdWC(0x0c);   //开显示及   光标设置       
  66. }

  67. void charlcdpos(unsigned char x,unsigned char y)
  68. {
  69.     x_pos=x;
  70.         y_pos=y;
  71.         x_pos&=0x0f;
  72.         y_pos&=0x01;

  73.         if(y_pos==0)  LcdWC(x_pos|0x80);           //  写第一行命令
  74.         else    LcdWC(x_pos|0xc0);                           //  写第二行命令
  75. }

  76. void putchar(unsigned char x,unsigned char y,unsigned char c)
  77. {
  78.     charlcdpos(x,y);
  79.         LcdWD(c);
  80. }
  81. /*
  82. void charcursornext(void)
  83. {
  84.     x_pos++;
  85.         if(x_pos>15)
  86.         {
  87.            x_pos=0;
  88.            y_pos++;
  89.            y_pos&=0x1;
  90.         }
  91. }
  92.   */
  93. void  displayInit(void)
  94. {  unsigned char tmp;


  95.                     tmp=time/10;putchar(4,0,num[tmp]);
  96.                         tmp=time%10;putchar(5,0,num[tmp]);        putchar(6,0,0x3a);

  97.                         tmp=minte/10;putchar(7,0,num[tmp]);
  98.                         tmp=minte%10;putchar(8,0,num[tmp]);        putchar(9,0,0x3a);

  99.                         tmp=second/10;putchar(10,0,num[tmp]);
  100.                         tmp=second%10;putchar(11,0,num[tmp]);

  101.                         tmp=result/10; putchar(7,1,num[tmp]);
  102.                         tmp=result%10;putchar(8,1,num[tmp]);
  103.        
  104. }
  105. void IRS_EX0() interrupt 0 using 1
  106. {
  107.         if(swit_flg==0)
  108.         {        time=0;
  109.                 minte=0;
  110.                 second=0;
  111.                 result=0;
  112.                 swit_flg=1;
  113.                 ET0=1;
  114.                 ET1=1;
  115.                 TR0=1;
  116.             TR1=1;
  117.         }
  118.         else if(swit_flg==1)
  119.         {        result=(minte*60+second)*2;
  120.             swit_flg=0;
  121.                 ET0=0;
  122.                 ET1=0;

  123.         }
  124. }
  125. void  IRS_T0() interrupt 1 using 2
  126. {
  127.         Control=1;
  128.         TH0=0XD8;
  129.         TL0=0XF0;
  130.         Control=0;
  131. }
  132. void  ISR_T1() interrupt 3 using 2
  133. {
  134.         second++;
  135.                 if(second>=60)
  136.                 {        second=0;
  137.                         minte++;
  138.                 }
  139.                 if(minte>=60)
  140.                 {        minte=0;
  141.                         time++;
  142.                 }
  143.                 if(time>=24) time=0;
  144. }
  145. void init_TC()
  146. {
  147.         TMOD=0X61;
  148.         TH0=0Xd8;  //
  149.         TL0=0Xf0;
  150.         TL1=0XbC;//TL1=0X9C;
  151.         TH1=0XbC;
  152.         //IE=0X8A;
  153.         Control=0;
  154. //   TR0=1;
  155. //        TR1=1;
  156. }
  157. void init_EX0()
  158. {
  159.         IT0=1;
  160.         EX0=1;
  161.         EA=1;
  162. }


  163. void main()
  164. {  unsigned char  tmp;

  165.         LcdInit();
  166.         displayInit();          
  167.         delay_ms(100);

  168.         init_TC();
  169.         init_EX0();

  170.         while(1)
  171.         {
  172. ……………………

  173. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
出租车.rar (62.14 KB, 下载次数: 115)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶2 踩
回复

使用道具 举报

板凳
ID:765587 发表于 2020-5-31 15:44 | 只看该作者
大佬辛苦
回复

使用道具 举报

沙发
ID:643823 发表于 2019-11-19 20:55 | 只看该作者
Heraldic 发表于 2019-10-13 22:15
楼主,仿真工程文件用哪个呀,打不开呀,

这个可以出来仿真吗
回复

使用道具 举报

楼主
ID:623204 发表于 2019-10-13 22:15 | 只看该作者
楼主,仿真工程文件用哪个呀,打不开呀,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表