找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 33801|回复: 43
收起左侧

电阻应变式压力传感器的proteus仿真

  [复制链接]
ID:137190 发表于 2016-9-9 02:09 | 显示全部楼层 |阅读模式
0.png

  1. #include"reg51.h"//头文件
  2. #include<intrins.h>
  3. #define DD P2
  4. sbit CS=P1^0; //定义端口
  5. sbit CLK=P1^1;
  6. sbit DO=P1^2;
  7. sbit DI=P1^3;
  8. sbit KEY=P1^7;
  9. sbit buzzer=P0^0;
  10. sbit Rs=P1^4;//LCD定义端口
  11. sbit Rw=P1^5;
  12. sbit E=P1^6;
  13. sbit busy_p=ACC^7;
  14. unsigned char CH=0x02,key_count=1;
  15. unsigned char HC[6]={0};
  16. unsigned char BZ=0;
  17. void delay_1ms(unsigned char i) //延时函数1ms
  18. {
  19. unsigned char j;
  20. while(i--)
  21. for(j=0;j<125; j++);
  22. }
  23. void delay_10ns(unsigned char i)//延时函数10ns
  24. {
  25. unsigned char j;
  26. while(i--)
  27. for(j=0;j<10; j++);
  28. }
  29. void xiezhiling(unsigned char com,bit p)//写命令函数
  30. {
  31. if(p)
  32. delay_10ns(5);
  33. E=0;
  34. Rs=0;
  35. Rw=0;
  36. DD=com;
  37. delay_10ns(50);
  38. E=1;
  39. delay_1ms(2);
  40. E=0;
  41. delay_10ns(4);
  42. }
  43. void xieshuju(unsigned char DATA)//写数据函数
  44. {
  45. delay_10ns(50);
  46. E=0;
  47. Rs=1;
  48. Rw=0;
  49. DD=DATA;
  50. delay_10ns(50);
  51. E=1;
  52. delay_10ns(50);
  53. E=0;
  54. delay_10ns(4);
  55. }

  56. void init(void)//初始化函数
  57. {
  58. delay_1ms(15);
  59. xiezhiling(0x38,0);
  60. delay_1ms(5);
  61. xiezhiling(0x38,0);
  62. delay_1ms(5);
  63. xiezhiling(0x38,0);
  64. delay_1ms(5);
  65. xiezhiling(0x38,1); //功能设定(8位,2行,5*7点矩阵)
  66. xiezhiling(0x08,1);
  67. xiezhiling(0x01,1); //清除屏幕
  68. xiezhiling(0x06,1); //加1
  69. xiezhiling(0x0c,1);//显示器ON,光标OFF,闪烁OFF
  70. }
  71. unsigned char ADconv(void)//AD转换子程序
  72. {
  73. unsigned char i;
  74. unsigned int data_f=0,data_c=0;
  75. DI=1;
  76. CS=1;
  77. _nop_();
  78. CS=0;
  79. DI=1; ;
  80. CLK=1;
  81. _nop_();
  82. _nop_();
  83. CLK=0;
  84. _nop_();
  85. _nop_();
  86. CLK=1;
  87. DI=(bit)(0x02&CH);
  88. _nop_();
  89. CLK=0;
  90. _nop_();
  91. _nop_();
  92. CLK=1;
  93. DI=(bit)(0x01&CH);
  94. _nop_();
  95. _nop_();
  96. CLK=0;
  97. DI=1;
  98. CLK=1;
  99. _nop_();
  100. _nop_();
  101. CLK=0;
  102. _nop_();
  103. CLK=1;
  104.      

  105. for(i=8;i>0;i--)
  106. {
  107.   data_f|=DO;
  108.   data_f<<=1;
  109.   CLK=1;
  110.   _nop_();
  111.   _nop_();
  112.   CLK=0;
  113.   _nop_();
  114. }
  115. for(i=8;i>0;i--)
  116. {
  117.   data_c<<=1;
  118.   data_c|=DO;
  119.   _nop_();
  120.   CLK=1;
  121.   _nop_();
  122.   _nop_();
  123.   CLK=0;
  124.   _nop_();

  125. }

  126. CLK=0;
  127. _nop_();
  128. _nop_();
  129. CLK=1;
  130. _nop_();
  131. _nop_();

  132. CLK=0;
  133. _nop_();
  134. _nop_();
  135. CLK=1;
  136. _nop_();
  137. CS=1;
  138. _nop_();
  139. _nop_();
  140. return data_f;
  141. }

  142. void xs_int(unsigned int shuju)//将一个数据各个位分开并存放在H C[]数组中
  143. {

  144. if(shuju < 10)
  145.   BZ = 1;
  146. else if(shuju < 100) BZ = 2;
  147. else if(shuju < 1000) BZ = 3;
  148. else if(shuju < 10000) BZ = 4;
  149. else if(shuju < 65535) BZ = 5;
  150. switch(BZ)
  151. {
  152.   case 5:HC[5] = shuju/10000; //百位
  153.   case 4:HC[3] = shuju%10000/1000;//十位
  154.   case 3:HC[2] = shuju%1000/100;//个位
  155.   case 2:HC[1] = shuju%100/10;//小数点后一位
  156.   case 1:HC[0] = shuju%10;
  157.   break;
  158.   default:break;
  159. }



  160. }
  161. void main(void)//主函数
  162. {
  163. unsigned int data_temp=0;
  164. init();
  165. TMOD=0x01;
  166. TH0=(65536-50000)/256;
  167. TL0=(65536-50000)%256;
  168. ET0=1;
  169. TR0=1;



  170. while(1)
  171. {
  172.   data_temp=ADconv();
  173.   if(data_temp>128)//报警数值
  174.   {
  175.    EA=1;
  176.   }
  177.   else
  178.   {
  179.    EA=0;
  180.    buzzer=0;
  181.   }
  182.   P3=~data_temp;
  183.   xs_int(196*data_temp);
  184.   if(KEY==0)
  185.   {
  186.    delay_1ms(10);
  187.    if(KEY==0)
  188.    while(!KEY);
  189.    key_count++;
  190.    if(key_count==3)
  191.    key_count=1;
  192.    xiezhiling(0x01,0);
  193.    
  194.   }

  195.   if(key_count==1)
  196.   {
  197.    xiezhiling(0x80,1);//LCD第一行
  198.    xieshuju('P');
  199.    xieshuju('R');
  200.    xieshuju('E');
  201.    xieshuju('S');
  202.    xieshuju('S');
  203.    xieshuju('U');
  204.    xieshuju('R');
  205.    xieshuju('E');
  206.    xieshuju('-');
  207.    xieshuju(HC[5]+0x30);
  208.    xieshuju(HC[3]+0x30);
  209.    xieshuju(HC[2]+0x30);
  210.    xieshuju('.');
  211.    xieshuju(HC[1]+0x30);
  212.    xieshuju('P');
  213.    xieshuju('a');
  214.   
  215.    xiezhiling(0x80+0x40,1);//LCD第二行
  216.    xieshuju('A');
  217.    xieshuju('l');
  218.    xieshuju('a');
  219.    xieshuju('r');
  220.    xieshuju('m');
  221.    xieshuju(' ');
  222.    xieshuju('S');
  223.    xieshuju('t');
  224.    xieshuju('a');
  225.    xieshuju('t');
  226.    xieshuju('u');
  227.    xieshuju('s');
  228.    xieshuju('-');
  229.    xieshuju('-');
  230.    xieshuju('O');
  231.    xieshuju('N');
  232.    
  233.   }
  234.   if(key_count==2)
  235.   {
  236.    xiezhiling(0x80,1);//LCD第一行
  237.    xieshuju('P');
  238.    xieshuju('r');
  239.    xieshuju('e');
  240.    xieshuju('s');
  241.    xieshuju('s');
  242.    xieshuju('u');
  243.    xieshuju('r');
  244.    xieshuju('e');
  245.    xieshuju(' ');
  246.    xieshuju('i');
  247.    xieshuju('s');
  248.    xieshuju(' ');
  249.    xieshuju('O');
  250.    xieshuju('K');
  251.    xieshuju(' ');
  252.    xieshuju(' ');
  253.    
  254.   
  255.    xiezhiling(0x80+0x40,1);//LCD第二行
  256.    xieshuju('m');
  257.    xieshuju('a');
  258.    xieshuju('d');
  259.    xieshuju('e');
  260.    xieshuju(' ');
  261.    xieshuju('B');
  262.    xieshuju('Y');
  263.    xieshuju(' ');
  264.    xieshuju('f');
  265.    xieshuju('u');
  266.    xieshuju('b');
  267.    xieshuju('a');
  268.    xieshuju('o');
  269.    xieshuju('j');
  270.    xieshuju('i');
  271.    xieshuju('e');
  272.    xieshuju(' ');
  273.    
  274.   }
  275.   
  276. }
  277. }

  278. void timer0() interrupt 1     // 中断方式1
  279. {
  280. TH0=(65536-50000)/256;
  281. TL0=(65536-50000)%256;
  282. buzzer=!buzzer;
  283.         
  284. }
复制代码

0.png
电阻应变式压力传感器的proteus仿真的全部资料下载: 仿真文件.zip (77.96 KB, 下载次数: 660)

评分

参与人数 3黑币 +15 收起 理由
xyyz + 5
XINGYALEE + 5 赞一个!
QQwert + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:153677 发表于 2016-12-10 16:53 | 显示全部楼层
请问能将各个元件说明下吗 谢谢
回复

使用道具 举报

ID:153883 发表于 2016-12-11 14:16 来自手机 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:184098 发表于 2017-3-28 13:23 | 显示全部楼层
好像好高级的样子~学习学习!
回复

使用道具 举报

ID:119421 发表于 2017-4-12 14:59 | 显示全部楼层
只有仿真模型,没有.hex文件啊
回复

使用道具 举报

ID:195386 发表于 2017-5-2 13:02 | 显示全部楼层
楼主,数据出不来啊
回复

使用道具 举报

ID:227373 发表于 2017-8-20 15:39 | 显示全部楼层
到底能不能打开兄弟们
回复

使用道具 举报

ID:227373 发表于 2017-8-20 15:43 | 显示全部楼层
果然是没有.hex文件,我的币啊  我很穷的。。。。。。。。。。。。。
回复

使用道具 举报

ID:308395 发表于 2018-4-16 17:58 | 显示全部楼层
24不可说 发表于 2017-4-12 14:59
只有仿真模型,没有.hex文件啊

将楼主发表的程序复制粘贴到Keil中,自己运行就可以,我运行0错误。
回复

使用道具 举报

ID:308395 发表于 2018-4-16 18:02 | 显示全部楼层
陈建圩 发表于 2016-12-21 09:34
楼主,程序不能运行唉

你将楼主写的这段程序复制粘贴到Keil,自己运行就可以,我运行是零错误
回复

使用道具 举报

ID:308395 发表于 2018-4-16 18:02 | 显示全部楼层
24不可说 发表于 2017-4-12 14:59
只有仿真模型,没有.hex文件啊

你将楼主写的这段程序复制粘贴到Keil,自己运行就可以,我运行是零错误
回复

使用道具 举报

ID:308395 发表于 2018-4-16 18:03 | 显示全部楼层
同志们,将楼主写的这段程序复制粘贴到Keil,自己运行就可以,我运行是零错误。目前就是这样,还没看程序,在学习中
回复

使用道具 举报

ID:308395 发表于 2018-4-17 08:20 | 显示全部楼层
楼主,你现在还在吗?你能具体讲解一下程序运行吗?它是怎么一步操作紧扣下一步的?
回复

使用道具 举报

ID:329561 发表于 2018-5-16 17:35 | 显示全部楼层
仿真出来压强值一直是0,C程序有点问题
回复

使用道具 举报

ID:333560 发表于 2018-5-21 21:14 | 显示全部楼层
是的,仿真出来的数据一直是0,有哪位大神能告知是哪里的问题吗
回复

使用道具 举报

ID:345256 发表于 2018-6-7 19:28 | 显示全部楼层
仿真出来数显表没有数字啊,另外我在哪调外加压力呢……求大神解答谢谢
回复

使用道具 举报

ID:359618 发表于 2018-6-26 19:52 | 显示全部楼层
楼主还在吗,protues小白想问问怎么施加压强啊,我的一直不显示数
回复

使用道具 举报

ID:360489 发表于 2018-6-30 07:48 来自手机 | 显示全部楼层
zhb950723 发表于 2017-5-2 13:02
**** 作者被禁止或删除 内容自动屏蔽 ****

我的下载不了
回复

使用道具 举报

ID:349342 发表于 2018-7-7 00:03 | 显示全部楼层
天琊无悔 发表于 2018-6-26 19:52
楼主还在吗,protues小白想问问怎么施加压强啊,我的一直不显示数

你成功了么?
回复

使用道具 举报

ID:408389 发表于 2018-10-12 12:20 | 显示全部楼层
是啊,不知道怎么加减压力
回复

使用道具 举报

ID:194625 发表于 2018-12-20 15:11 | 显示全部楼层
不错的东西,我用用
回复

使用道具 举报

ID:380539 发表于 2019-1-4 11:17 | 显示全部楼层
测试了一下,程序没有问题,再次感谢楼主
回复

使用道具 举报

ID:511014 发表于 2019-4-13 10:57 | 显示全部楼层
左上角电容上面的是个什么元件,求告知各位!!!楼主怎么没标注
回复

使用道具 举报

ID:565895 发表于 2019-6-18 16:44 | 显示全部楼层
请问这个的原理图是哪个类型啊,我想自己画一个
回复

使用道具 举报

ID:556779 发表于 2019-6-26 09:55 | 显示全部楼层
仿真了但是没有显示呢,这个压力怎么调呢?如何吧压力传感器换成电桥,因为我要贴应变片
回复

使用道具 举报

ID:679255 发表于 2020-1-6 08:44 来自手机 | 显示全部楼层
宫商角徵羽smile 发表于 2018-4-16 18:02
你将楼主写的这段程序复制粘贴到Keil,自己运行就可以,我运行是零错误

Build  通不过啊
回复

使用道具 举报

ID:678803 发表于 2020-3-14 13:12 | 显示全部楼层
修改版: 文件.7z (51.03 KB, 下载次数: 27)
回复

使用道具 举报

ID:723477 发表于 2020-4-6 20:27 | 显示全部楼层
xyzmk123 发表于 2018-5-16 17:35
仿真出来压强值一直是0,C程序有点问题

解决了吗
回复

使用道具 举报

ID:742536 发表于 2020-5-2 10:57 | 显示全部楼层
可以进行仿真,LCD显示值是传感器的2倍,程序没有问题。
51hei图片20200502105630.png
回复

使用道具 举报

ID:468084 发表于 2020-5-8 21:38 | 显示全部楼层
Haroldlrh 发表于 2020-5-2 10:57
可以进行仿真,LCD显示值是传感器的2倍,程序没有问题。

兄弟 压力怎么显示出来的,  我的一直是零。
回复

使用道具 举报

ID:765415 发表于 2020-5-31 18:23 | 显示全部楼层
Haroldlrh 发表于 2020-5-2 10:57
可以进行仿真,LCD显示值是传感器的2倍,程序没有问题。

请问你的数据是怎么显示的,可以贴代码吗!
回复

使用道具 举报

ID:302325 发表于 2020-6-1 01:43 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:773860 发表于 2020-6-9 15:01 | 显示全部楼层
用protues怎么打开
回复

使用道具 举报

ID:781838 发表于 2020-6-19 22:36 | 显示全部楼层
希望protues发展越来越壮大
回复

使用道具 举报

ID:794732 发表于 2020-7-6 14:46 | 显示全部楼层
有没有人知道为什么显示屏的压力总是0
回复

使用道具 举报

ID:904660 发表于 2021-4-12 21:32 | 显示全部楼层
Haroldlrh 发表于 2020-5-2 10:57
可以进行仿真,LCD显示值是传感器的2倍,程序没有问题。

请问有做其他改动吗?我的一直显示0pa,而且你的P3口好像没有链接?
回复

使用道具 举报

ID:921271 发表于 2021-5-14 17:12 | 显示全部楼层
栋宇栋宇 发表于 2018-5-21 21:14
是的,仿真出来的数据一直是0,有哪位大神能告知是哪里的问题吗

你咋解决的呀
回复

使用道具 举报

ID:908826 发表于 2021-10-26 08:11 | 显示全部楼层
不错不错,程序有值得学习的地方,谢谢分享
回复

使用道具 举报

ID:1024242 发表于 2022-5-6 21:59 | 显示全部楼层
为啥气压显示一直是0啊程序有误吗
回复

使用道具 举报

ID:262 发表于 2022-5-7 04:12 | 显示全部楼层
WHUTXHL 发表于 2022-5-6 21:59
为啥气压显示一直是0啊程序有误吗

你用的Proteus版本不对,按楼主的说明用7.5版就可以了,你看图
51hei.gif
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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