找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2954|回复: 1
收起左侧

12864液晶屏显示各种传感器

[复制链接]
ID:71259 发表于 2014-12-29 20:40 | 显示全部楼层 |阅读模式
本帖最后由 daming 于 2014-12-29 20:41 编辑
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define jian P1
  5. sbit bf=P0^7;
  6. sbit lcd_rs=P2^6;
  7. sbit lcd_rw=P2^5;
  8. sbit lcd_e=P2^4;
  9. sbit lcd_reset=P2^7;
  10. sbit lihe=P2^0;
  11. sbit shache=P2^1;
  12. sbit ge=P3^2;
  13. sbit sj_p33=P3^3;
  14. sbit zhengfan=P3^4;
  15. bit aj_1,zd_1,jin_1,song_1,ti_1,tj_1;
  16. uint gaodu_0,gaodu_1,shiji_0,cishu;
  17. uchar shiling,ms,sj_s,sj_j;
  18. uchar code  hz_bj1[]={"计数传感器无信号"};
  19. uchar code  hz_bj2[]={"方向传感信号无  "};
  20. uchar code  hz_bj3[]={"检测到反转超限  "};
  21. uchar code  hz_bj4[]={"检测到正转超限  "};
  22. uchar code  hz_bj5[]={"过紧或传感器失灵"};
  23. uchar code hz_kong[]={"                "};
  24. uchar code    zzzk[]={"欢迎使用职专智控"};
  25. uchar code     csh[]={"正在初始化。。。"};
  26. uchar code     qqh[]={"qq:000000"};
  27. uchar code    hz_t[]={"态:"};
  28. uchar code   hz_gs[]={"过松"};
  29. uchar code   hz_gj[]={"过紧"};
  30. uchar code   hz_tz[]={"停"};
  31. uchar code    hz_z[]={"智"};
  32. uchar code hz_jing[]={"警"};
  33. uchar code   hz_tg[]={"提高"};
  34. uchar code   hz_lh[]={"离合"};
  35. uchar code    tb_1[]={"●"};
  36. uchar code    tb_2[]={"○  "};
  37. uchar code hz_sheng[]={"升"};
  38. uchar code hz_jiang[]={"降"};
  39. uchar code hz_sc[]={"刹车"};
  40. uchar        rem[]={0,0,1,0};
  41. uchar     rem_cs[]={0,0,0,0};
  42. uchar      rem_1[]={0,0};
  43. uchar     rem_sj[]={0,0};
  44. uchar    rem_gd1[]={0,0,0,0};
  45. uchar   code bcd[]={"0123456789"};
  46. /////////////
  47. yanshi(uint t)
  48. {
  49. uint i,j;
  50. for(i=0;i<t;i++)
  51.    {
  52.     for(j=0;j<110;j++);
  53.     }
  54. }
  55. //////////////////////
  56. yanshi1(uint t)
  57. {
  58. while(t--);
  59. }
  60. ///////////////////////////
  61. fuwei()
  62. {yanshi(5);
  63. lcd_reset=0;
  64. yanshi(5);
  65. lcd_reset=1;
  66. }
  67. ///////////////////////////
  68. xie_lcd(bit ly,uchar shuju_lcd)
  69. {
  70. lcd_rs=ly;
  71. lcd_rw=0;
  72. lcd_e=0;
  73. P0=shuju_lcd;
  74. yanshi(5);
  75. lcd_e=1;
  76. yanshi(5);
  77. lcd_e=0;
  78. }
  79. /////////////////////////////
  80. /////////////////////////////
  81. lcd_zuobiao(uchar x,uchar y)
  82. {
  83. uchar temp;
  84. if(x==0)
  85.    {x=0x80;}
  86. if(x==1)
  87.    {x=0x90;}
  88. if(x==2)
  89.    {x=0x88;}
  90. if(x==3)
  91.    {x=0x98;}
  92. temp=x+y;
  93. xie_lcd(0,temp);
  94. }
  95. ///////////////////////////
  96. xiehz(uchar xx,uchar yy,uchar code *chn)
  97. {
  98.     uchar i;
  99. lcd_zuobiao(xx,yy);
  100. i=0;
  101. while(chn[i]!='\0')
  102.      {
  103.       xie_lcd(1,chn[i]);
  104.       i++;
  105.      }
  106. }
  107. ///////////////////////////
  108. xiesz(uchar xx,uchar yy,uchar wei,uchar *chn)
  109. {
  110.     uchar i;
  111. lcd_zuobiao(xx,yy);
  112. for(i=0;i<wei;i++)
  113.      {
  114.       xie_lcd(1,bcd[chn[i]]);
  115.      }
  116. }
  117. ///////////////////////////
  118. ///////////////////////////
  119. xieping_1()
  120. {
  121. xiehz(0,0,hz_t);
  122. xiehz(0,4,hz_tg);
  123. xiehz(1,0,hz_lh);
  124. xiehz(2,0,hz_sc);
  125. }
  126. ///////////////////////////
  127. chushihua_p()
  128. {
  129. xie_lcd(0,0x30);
  130. xie_lcd(0,0x0c);
  131. xie_lcd(0,0x01);
  132.   xiehz(0,0,zzzk);
  133.   //xiehz(2,0,csh);
  134.   xiehz(3,2,qqh);
  135. yanshi(2000);
  136. xie_lcd(0,0x01);
  137. xieping_1();
  138. xiehz(0,2,hz_tz);
  139. xiesz(0,6,4,rem);
  140. }
  141. ///////////////////////////
  142. ////////////////////停机,离合器离开,同时刹车刹住
  143. ting()
  144. {
  145. fuwei();
  146. chushihua_p();
  147. lihe=1;
  148. EA=0;
  149. TR1=0;
  150. EX0=0;EX1=0;
  151. zd_1=0;
  152. ms=0;
  153. xiehz(0,2,hz_tz);
  154. xiehz(1,2,tb_2);
  155. xiehz(2,2,tb_2);
  156. //shache=0;//xiesz(3,0,4,rem_gd1);shiling=0;
  157. }
  158. ///////////////////
  159. sd_lh()
  160. {
  161. if(~zd_1)
  162. {
  163. while(jian==0xf7)lihe=0;
  164. lihe=1;
  165. }
  166. }
  167. ///////////////
  168. sd_sc()
  169. {
  170. if(~zd_1)
  171. {
  172. while(jian==0xfb)shache=0;
  173. shache=1;
  174. }
  175. }
  176. /////////////////////
  177. shujuchuli_0()
  178. {
  179. uint shuju;
  180. shuju=gaodu_0-200;
  181. rem[1]=shuju%1000/100;
  182. rem[2]=shuju%100/10;
  183. rem[3]=shuju%10;
  184. xiesz(0,6,4,rem);
  185. //if(gaodu_1>=200)
  186. //{
  187.       shuju=gaodu_1;//-200;
  188. rem_gd1[1]=shuju%1000/100;
  189. rem_gd1[2]=shuju%100/10;
  190. rem_gd1[3]=shuju%10;
  191. xiesz(3,0,4,rem_gd1);
  192. // }
  193.     shuju=cishu;
  194. rem_cs[1]=shuju%1000/100;
  195. rem_cs[2]=shuju%100/10;
  196. rem_cs[3]=shuju%10;
  197. xiesz(3,6,4,rem_cs);
  198. }
  199. /////////////////////
  200. /////////////提低//////////////////////////////////
  201. tidi()
  202. {
  203. if(gaodu_0>210)gaodu_0--;
  204. }
  205. //////提高
  206. tigao()
  207. {
  208. gaodu_0++;
  209. }
  210. ///////////////
  211. ///////////////////
  212. ///////////////////自动
  213. zidong()
  214. {
  215. if(ms==0)if(zd_1==0)
  216.         {
  217.         ms=1;
  218.         xiehz(0,2,hz_z);
  219.   shiling=0;
  220.   gaodu_1=200;
  221.         TMOD=0x10;
  222.         ET1=1;
  223.         TH1=0;TL1=0;TR1=1;
  224.         zd_1=1;
  225.         shache=1;
  226.         lihe=0;
  227.         ti_1=1; //  //提升标志致一                        
  228.   IT0=1;//负跳变有效
  229.   EX0=1;//开外int0中断
  230.         IT1=1;//负跳变有效
  231.   //EX1=1;//开外int1中断
  232.         EA=1;
  233.         }
  234. }
  235. ///////////////////键盘
  236. jianpan()
  237. {
  238. uchar jianma;
  239. jian=0xff;
  240. if(jian==0xff)aj_1=1;
  241. else{
  242.      yanshi1(50);
  243.      if(jian==0xff)return;
  244.      if(aj_1)
  245.         {
  246.           jianma=jian&0xff;
  247.           aj_1=0;
  248.           switch(jianma)
  249.               {
  250.                case 0x7f:
  251.                           {
  252.                            zd_1=0;
  253.                            if(ms==2)ting();
  254.                           }
  255.                         break;
  256.                case 0xbf:zidong();break;
  257.                case 0xdf:tidi();break;
  258.                case 0xef:tigao();break;
  259.                case 0xf7:sd_lh();break;
  260.                case 0xfb:sd_sc();break;
  261.                case 0xfd:jin_1=1;break;
  262.                case 0xfe:song_1=1;break;
  263.                }
  264.          }
  265.       
  266.     }
  267. }
  268. ///////////////////////////
  269. chushihua_jiqi()
  270. {
  271. lihe=1;
  272. shache=1;
  273. gaodu_0=230;
  274. gaodu_1=200;
  275. shiji_0=203;
  276. cishu=0;
  277. PX0=1;
  278. shujuchuli_0();
  279. }
  280. ///////////////////////////////////
  281. jing()
  282. {
  283.            ms=2;
  284.            shiling=0;
  285.            gaodu_1=200;
  286.            xiehz(0,2,hz_jing);
  287.            xiehz(1,2,tb_2);
  288.   while(ms==2)
  289.    {
  290.    EX0=0;
  291.    lihe=1;
  292.    jianpan();
  293.    }
  294.            xieping_1();
  295.            ting();
  296.            xiehz(3,0,hz_kong);
  297. }
  298. ///////////////////////////////////
  299. guole()
  300. {
  301. EA=0;TR1=0;EX0=0;EX1=0;lihe=1;zd_1=0;
  302. jing();
  303. }
  304. ////////////////////////////////
  305. baoxian() interrupt 3
  306. {
  307. TH1=0;
  308. TL1=0;
  309.   shiling++;
  310.      if(shiling>200)
  311.           {
  312.            EA=0;TR1=0;EX0=0;EX1=0;lihe=1;zd_1=0;
  313.            xiehz(3,0,hz_bj1);
  314.            jing();
  315.            }
  316. }
  317. //////////////////////////
  318. ///////////////////////////
  319. void main(void)
  320. {
  321. lihe=1;shache=1;                  //
  322. fuwei();                          //屏幕复位
  323. chushihua_p();                    //初始化屏
  324. chushihua_jiqi();                 ///初始化机器
  325. while(1)                              
  326.   {                        
  327.          if(~zd_1)lihe=1;                                  //不是自动模式离合松
  328.          shujuchuli_0();                                   //数据处理
  329. jianpan();                                                
  330.          if(lihe){xiehz(1,2,tb_2);xiehz(1,4,hz_jiang);}    //松开时写实心球写降字
  331.          else {xiehz(1,2,tb_1);xiehz(1,4,hz_sheng);}       //结合时写升
  332. jianpan();                        
  333.          if(shache)xiehz(2,2,tb_2);                        //                    
  334.          else xiehz(2,2,tb_1);                             //
  335. jianpan();
  336.   if(jin_1)xiehz(2,4,hz_gs);                         //
  337.   else xiehz(2,4,hz_gj);                              //
  338. if(sj_s>20){EX0=0;xiehz(3,0,hz_bj5);guole();sj_s=0;}        //
  339.   }
  340. }
  341. ///////////////////查磁片程序/////////////
  342. jishu1()  interrupt 0   
  343. {
  344. EX0=0;
  345. yanshi1(20);                                          ///消除线路干扰,消抖
  346.   if(~ge)                                                ///消抖
  347.     {
  348.           shiling=0;                                      ///防止计数传感器失灵,或机器不转
  349.           if(zhengfan)
  350.             {              if(~ti_1)lihe=1;                //提起标志为零时离合器松开
  351.                            else
  352.                                 {                           //提起标志1时
  353.                                 while((zhengfan)&&(~ge));   //等待方向传感器被触发,
  354.                                 if(ge)                     
  355.                                    {                        //方向传感器没有被触发时
  356.                                     EA=0;EX0=0;             //总中断为零不再计数
  357.                                     lihe=1;zd_1=0;          //离合松,自动标志为0
  358.                                     xiehz(3,0,hz_bj2);      //写方向传感器失灵汉字
  359.                                     jing();                 //进入警状态
  360.                                     }
  361.                                 }
  362.                                 if(tj_1)                    //调节标志为一时进行调节
  363.                                    {
  364.                                    tj_1=0;                  ///置零调节标志,只进行一次调节
  365.                                    EX1=0;                    //关闭过松触发中断
  366.                                    song_1=1;                  //松标志置一,
  367.                                    }
  368.             gaodu_1++;                         //提升高度计数加加
  369.                           
  370.          ////////////////////////////////////////////////////////////////
  371.            if(zd_1)
  372.                     {                                          // 是自动模式判断高度
  373.            if(gaodu_1>=gaodu_0)///                    ///高度到否判断
  374.                {                                   //到了
  375.                              if(~jin_1)                     
  376.                                    {                           //紧标志零时
  377.                  ti_1=0;                     //提升标志置零
  378.                                    lihe=1;                     //离合断开
  379.                           yanshi1(40);                 //延时防干扰
  380.                                    }
  381.                              else
  382.                                 {                                //进标志一时
  383.                                 jin_1=0;                         // 置零,只紧一次
  384.                                 song_1=0;                        //松标志为零,不松了
  385.                                 gaodu_1--;                       //高度计数器减减,让提升数值不变。
  386.                                 sj_j++;                          //紧的次数加加
  387.                                 if(sj_j>4)gaodu_1--;             //连续紧超过4次了,多紧一个磁片
  388.                                 }  
  389.                            }
  390.                     }
  391.                 else   {
  392.                         lihe=1;ti_1=0;                          //落锤停车
  393.                         yanshi1(40);  
  394.         }   
  395.              }            
  396. ///////////////////////////////////////////////////////////////////////////////////
  397.   else
  398.               {   
  399.             gaodu_1--;                                //落锤时高度减减
  400.                if(gaodu_1<=shiji_0)
  401.                    {                                     //落到底了
  402.                      if(zd_1)                             ///
  403.                     {
  404.                                  if(~song_1)                  
  405.                                      {                           //松标志为零时提升
  406.                                       if(~ti_1)cishu++;          //打夯次数加一
  407.            ti_1=1;                    //提升标志
  408.                                       tj_1=1;                    //调节标志
  409.                                       lihe=0;                   ///结合离合显示上横
  410.               EX1=1;                     //开外中断1,检查是否松,
  411.                                       yanshi1(40);               //延时
  412.                                      }
  413.                                  else
  414.                                       {
  415.                                        song_1=0;                //松标志置零
  416.                                        gaodu_1++;               //松一个磁片
  417.                                        sj_j=0;                  //紧次数置零
  418.                                        sj_s++;                  // 松的次数加加
  419.                                        if(sj_s>4)gaodu_1++;     //连续松了超4次了,多松一个
  420.                                       }
  421.                     }
  422.                      else ting();                          //停车
  423.                     }
  424.         }
  425.     }
  426. EX0=1;
  427. }
  428. ////////////////////////////////////////
  429. songle()  interrupt 2
  430. {yanshi(30);
  431. if(~sj_p33)
  432.           {
  433.            jin_1=1;
  434.            sj_s=0;  //碰到钢丝绳时松计数置零,防止过松。
  435.            EX1=0;
  436.            }
  437. }
复制代码


回复

使用道具 举报

ID:195884 发表于 2017-7-20 16:12 | 显示全部楼层
这个程序是何用途?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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