找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机车辆超载检测仿真程序

[复制链接]
跳转到指定楼层
楼主
车辆超载


单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>
  4. #include <ad.h>
  5. #define uchar  unsigned char
  6. #define uint   unsigned int
  7. #define ulong   long
  8. uchar code zifux[]="0123456789abcdef";
  9. uchar code zifu0[]=" Overload test  ";
  10. uchar code zifu1[]=" parameter set"  ;



  11. sbit  key4=P2^3;  //-
  12. sbit  key5=P2^4;  //+
  13. sbit  key6=P2^5;  //moshi


  14. //-----------------------------

  15. sbit  led2=P0^1;  //灯
  16. sbit  led3=P0^2;  //灯
  17. sbit  buz=P2^0;  



  18. //模式
  19. uchar moshi=0;
  20. uchar run=3;
  21. uchar runled=0;

  22. uchar timel,timeh;
  23. uchar a_a;

  24. //次数
  25. uint  num=0;
  26. uint  time=1;
  27. uint  t=0;
  28. uint  t1=0;
  29. uint  ctime=1000;
  30. uint  R_flag=0;
  31. uint  C_flag=0;
  32. uint  f=1;
  33. uint  s1=0;
  34. uint  ff=0;
  35. uint  tt=1;
  36. ulong  ad;
  37. #include "1602.h"
  38. //#include "eepom52.h"

  39. void xianshi0()                                                                                                                                                        
  40. {  

  41.   //Weight---------
  42.   LCD1602_string(1,1,zifu0);
  43.   ad= adc0832(0);
  44.   ad=ad*4000/255;
  45.   lcd1602_adr(0x46);
  46.   lcd1602_writenumber('w');
  47.   lcd1602_writenumber(':');
  48.   lcd1602_writenumber(0x30+ad/1000);
  49.   lcd1602_writenumber(0x30+ad%1000/100);
  50.   lcd1602_writenumber(0x30+ad%100/10);
  51.   lcd1602_writenumber(0x30+ad%10);
  52.   lcd1602_writenumber('k');
  53.   lcd1602_writenumber('g');
  54.   //Count--------
  55.   lcd1602_adr(0x40);
  56.   lcd1602_writenumber('c');
  57.   lcd1602_writenumber(':');
  58.   lcd1602_writenumber(0x30+num%100/10);  
  59.   lcd1602_writenumber(0x30+num%10);  

  60. }

  61. void xianshi1()        
  62. {
  63.   LCD1602_string(1,1,zifu1);
  64.   //Weight---------
  65.   lcd1602_adr(0x46);
  66.   lcd1602_writenumber('w');
  67.   lcd1602_writenumber(':');
  68.   lcd1602_writenumber(0x30+ctime/1000);
  69.   lcd1602_writenumber(0x30+ctime%1000/100);
  70.   lcd1602_writenumber(0x30+ctime%100/10);
  71.   lcd1602_writenumber(0x30+ctime%10);
  72.   lcd1602_writenumber('k');
  73.   lcd1602_writenumber('g');
  74.   lcd1602_adr(0x4e); lcd1602_writenumber(' ');

  75.   //Count---------
  76.   lcd1602_adr(0x40);
  77.   lcd1602_writenumber('c');
  78.   lcd1602_writenumber(':');
  79.   lcd1602_writenumber(0x30+time%100/10);  
  80.   lcd1602_writenumber(0x30+time%10);
  81.   lcd1602_adr(0x44); lcd1602_writenumber(' ');
  82. }

  83. //控制---------------------------------
  84. void ctrl()
  85. {
  86.         //**********************************************************
  87.    if(moshi==0)
  88.    {
  89.          //开始
  90.         {
  91.         runled=1;
  92.         IT0=1;        //INT0 中断允许
  93.         EX0=1;    //INT0
  94.         //------INT1 中断允许-------
  95.         IT1=1;        //INT1 中断允许
  96.         EX1=1;    //INT1
  97.    }
  98.   }
  99.    if(key6==0)
  100.    {
  101.    moshi=moshi+1;
  102.    if(moshi==2){lcd1602_adr(0x44); lcd1602_writenumber('<');}
  103.    if(moshi==3){lcd1602_adr(0x4e); lcd1602_writenumber('<');}
  104.    if(moshi==4) moshi=0; while(key6==0);
  105.    }
  106.         //人数设置
  107.         if((key4==0)&&(moshi==2))
  108.         {
  109.         lcd1602_adr(0x44); lcd1602_writenumber('<');
  110.         if(time<99)time=time+1;         while(key4==0);
  111.         }
  112.         if((key5==0)&&(moshi==2))
  113.         {
  114.         lcd1602_adr(0x44); lcd1602_writenumber('<');
  115.         if(time>0) time=time-1;  while(key5==0);
  116.         }
  117.         //重量设置
  118.         if((key4==0)&&(moshi==3))
  119.         {
  120.         lcd1602_adr(0x4e); lcd1602_writenumber('<');
  121.         if(ctime<4000)ctime=ctime+100;while(key4==0);
  122.         }
  123.         if((key5==0)&&(moshi==3))
  124.         {
  125.         lcd1602_adr(0x4e); lcd1602_writenumber('<');
  126.         if(ctime>0)ctime=ctime-100; while(key5==0);
  127.         }
  128.    }

  129. //主函数
  130. void main()
  131. {
  132.   _delay_ms(10);
  133. //  led2=0;led1=1;
  134.   //初始化
  135.   lcd1602_init();   
  136.   LCD1602_string(1,1,zifux);
  137.   LCD1602_string(1,1,zifu0);
  138.   //------INT0 中断允许-------
  139.   IT0=1;        //INT0 中断允许
  140.   EX0=1;    //INT0
  141.   //------INT1 中断允许-------
  142.   IT1=1;        //INT1 中断允许
  143.   EX1=1;    //INT1
  144.   //使能中断  
  145.   EA=1;        
  146.   num=0;
  147.   while(1)
  148.   {
  149.         if(moshi==0)xianshi0();        
  150.         if(moshi>0)        xianshi1();
  151.         ctrl();
  152.     if(C_flag==1)
  153.         {
  154.         led3=0;
  155.         _delay_ms(500);
  156.         _delay_ms(500);
  157.         _delay_ms(500);
  158.         led3=1;
  159.         C_flag=0;
  160.         }
  161.         if(R_flag==1)
  162.         {
  163.         led2=0;
  164.         _delay_ms(500);
  165.         _delay_ms(500);
  166.         _delay_ms(500);
  167.         led2=1;
  168.         R_flag=0;
  169.         }  
  170.         if((num>time)||(ad>ctime)){buz=0;}
  171.    else {buz=1; }
  172. }        
  173. }

  174. //----INT0 中断函数
  175. void  EX_INT0() interrupt 0
  176. {
  177. //功能1
  178. if(runled==1)
  179. {
  180. t=1;
  181. if((t1==1))
  182. {
  183. num=num+1;  
  184. t1=0;
  185. t=0;
  186. R_flag=1;
  187. ff=1;
  188. }
  189. if(num==ctime){f++;ff=0;}
  190. }
  191. }
  192. //----INT1 中断函数
  193. void  EX_INT1() interrupt 2
  194. {
  195.   if(runled==1)
  196.   {
  197.         t1=1;  
  198.         if(num==ctime)
  199. {
  200.   s1++;
  201.   if(f>s1)
  202.         {
  203.         ff=1;
  204. s1=0;
  205. f=0;
  206. }
  207. }
  208.         if((t==1)&&(num>0)&&(ff==1))
  209.         {
  210.         num=num-1;
  211.         t1=0;t=0;
  212.   C_flag=1;
  213.   }
  214. }
  215. }
复制代码

Keil5代码与Proteus7.5仿真下载:
车辆超载检测仿真.7z (87.62 KB, 下载次数: 61)

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

使用道具 举报

沙发
ID:247623 发表于 2021-2-16 21:23 | 只看该作者
大家不要下载这份文件,不行啊,里面的仿真文件都是破损的,打不开。我下载了两次,都不行啊,还我10个下载币。请工作人员审核的时候好好审核一下,亲自运行一下仿真文件好吗,我们回答问题得币也不易。

评分

参与人数 1黑币 +15 收起 理由
51hei团团 + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:328014 发表于 2021-2-17 02:16 | 只看该作者
yilinghai 发表于 2021-2-16 21:23
大家不要下载这份文件,不行啊,里面的仿真文件都是破损的,打不开。我下载了两次,都不行啊,还我10个下载 ...

我用Proteus7.5版本可以打开,不过显示是这样的,估计你不是用的Proteus7.5吧,大家有时间研究一下看看程序有问题没有,还有没有改进的地方

51hei.png (19.06 KB, 下载次数: 74)

51hei.png
回复

使用道具 举报

地板
ID:247623 发表于 2021-2-19 21:12 | 只看该作者
51hei团团 发表于 2021-2-17 02:16
我用Proteus7.5版本可以打开,不过显示是这样的,估计你不是用的Proteus7.5吧,大家有时间研究一下看看程序 ...

你好,我用proteus7.8和proteus8.0都试过不行,奇怪,低版本的7.5竟然可以打开,神奇
回复

使用道具 举报

5#
ID:874650 发表于 2021-2-25 15:33 | 只看该作者
yilinghai 发表于 2021-2-19 21:12
你好,我用proteus7.8和proteus8.0都试过不行,奇怪,低版本的7.5竟然可以打开,神奇

你好,请问怎么运行呀,没有说明呢
回复

使用道具 举报

6#
ID:1021490 发表于 2022-4-28 15:34 | 只看该作者
源程序是test.uvproj用Keil5打开
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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