找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机病床呼叫装置仿真原理图与源码

[复制链接]
跳转到指定楼层
楼主
单片机病床呼叫装置仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. #define uc unsigned char
  3. #define ui unsigned int
  4. sbit RS=P1^4;
  5. sbit RW=P1^5;
  6. sbit E=P1^6;
  7. sbit D0=P1^3;
  8. sbit D1=P1^2;
  9. sbit D2=P1^1;
  10. sbit D3=P1^0;
  11. sbit bg_1602=P2^6;
  12. sbit key=P3^3;
  13. sbit Beep=P3^4;
  14. uc code tab0[]=" 123456789#";
  15. uc code tab1[]="Calling!!!";
  16. uc code tab2[]="I Know!";
  17. uc code tab3[]="Happy Every Day!";
  18. uc num_D0=0,num_D1=0,num_D2=0,num_D3=0;
  19.         bit bdata fu_D0=0;
  20.         fu_D1=0,fu_D2=0,fu_D3=0,flag;
  21. void delay(ui x)
  22. {
  23.         ui i,j;
  24.         for(i=0;i<x;i++)
  25.         for(j=0;j<121;j++);
  26. }
  27. void init()
  28. {
  29.         bg_1602=0;
  30.         TMOD=0x01;
  31.         TH0=0xff;
  32.         EA=1;
  33.         ET0=1;
  34.         TR0=1;
  35.         D0=0;
  36.         D1=0;
  37.         D2=0;
  38.         D3=0;
  39. }
  40. void com_1602(uc com)
  41. {
  42.         RS=0;
  43.         P0=com;
  44.         delay(1);
  45.         E=1;
  46.         delay(1);
  47.         E=0;
  48.         RS=1;
  49. }
  50. void data_1602(uc date)
  51. {
  52.         RS=1;
  53.         P0=date;
  54.         delay(1);
  55.         E=1;
  56.         delay(1);
  57.         E=0;
  58.         RS=0;
  59. }
  60. void dis_1602(uc word_num,uc hang,uc lie,uc tab_num,uc num)
  61. {
  62.         uc n;
  63.         for(n=0;n<word_num;n++)
  64.         {
  65.                 com_1602(0x80+hang*0x40+lie);
  66.                 if(tab_num==0)
  67.                         data_1602(tab0[num+n]);
  68.                 else if(tab_num==1)
  69.                         data_1602(tab1[num+n]);
  70.                 else if(tab_num==2)
  71.                         data_1602(tab2[num+n]);
  72.                 else if(tab_num==3)
  73.                         data_1602(tab3[num+n]);
  74.                 delay(5);
  75.                 lie++;
  76.         }
  77. }
  78. void init_1602()
  79. {
  80.         RW=0;
  81.         com_1602(0x38);
  82.         com_1602(0x0c);
  83.         com_1602(0x06);
  84.         com_1602(0x01);
  85. }
  86. void know()
  87. {
  88.         if(D0!=fu_D0)
  89.         num_D0=1;
  90.         if(D1!=fu_D1)
  91.         num_D1=2;
  92.         if(D2!=fu_D2)
  93.                 num_D2=3;
  94.         if(D3!=fu_D3)
  95.                 num_D3=4;
  96.         if(key==0)
  97.         {
  98.                 delay(5);
  99.                 if(key==0)
  100.                 {
  101.                         if((num_D0!=0)||(num_D1!=0)||(num_D2!=0)||(num_D3!=0))
  102.                         {
  103.                                 bg_1602=0;
  104.                                 Beep=1;
  105.                                 flag=0;
  106.                                 num_D0=0;num_D1=0;num_D2=0;num_D3=0;
  107.                                 fu_D0=D0;fu_D1=D1;fu_D2=D2;fu_D3=D3;
  108.                                 com_1602(0x01);
  109.                                 dis_1602(7,1,4,2,0);
  110.                         }
  111.                         else
  112.                         bg_1602=0;
  113.                 }
  114.                 while(!key);
  115.                 delay(2000);
  116.                 com_1602(0x01);
  117.         }
  118. }
  119. void display()
  120. {
  121.         if((num_D0==0)&&(num_D1==0)&&(num_D2=0)&&(num_D3==0))
  122.                 dis_1602(16,0,0,3,0);
  123.         else
  124.         {
  125.                 if(flag==0)
  126.                 {flag=1;
  127.                              com_1602(0x01);
  128. }
  129. if(num_D0==1)
  130. {
  131.    dis_1602(1,0,2,0,num_D0);
  132.    dis_1602(1,0,3,0,10);
  133.   }
  134.   if(num_D1==2);
  135.   {
  136.    dis_1602(1,0,5,0,num_D1);
  137.    dis_1602(1,0,6,0,10);
  138.    }
  139.    if(num_D2==3);
  140.   {
  141.    dis_1602(1,0,8,0,num_D2);
  142.    dis_1602(1,0,9,0,10);
  143.    }
  144.    if(num_D3==4);
  145.   {
  146.    dis_1602(1,0,11,0,num_D3);
  147.    dis_1602(1,0,12,0,10);
  148.    }
  149.    dis_1602(10,1,3,1,0);
  150. }
  151. }
  152. void LED()
  153. {
  154. if((D0!=fu_D0)||(D1!=fu_D1)||(D2!=fu_D2)||(D3!=fu_D3))
  155. bg_1602=0;
  156. }
  157. void main()
  158. {
  159. init();
  160. init_1602();
  161. while(1)
  162. {
  163. display();
  164. know();
  165. LED();
  166. }
  167. }
  168. void T0_time() interrupt 1
  169. {
  170.   ui m,n;
  171.   TH0=0x4b;
  172.   TL0=0xff;
  173.   m++;
  174.   if(m==10)
  175.   {
  176.   m=0;
  177.   
  178.   if((num_D0!=0)||(num_D1!=0)||(num_D2!=0)||(num_D3!=0))
  179.   Beep=~Beep;
  180.   }
  181.   if((bg_1602==0)&&(D0==fu_D0)&&(D1==fu_D1)&&(D2==fu_D2)&&(D3==fu_D3))
  182.   {
  183.     n++;
  184.         if(n==300)
  185.         {
  186.         n=0;
  187.         bg_1602=1;
  188.         }
  189. }
  190. }
复制代码

所有资料51hei提供下载:
病床呼叫装置.rar (91.96 KB, 下载次数: 72)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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