找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机病房呼叫系统代码与Proteus仿真图

[复制链接]
跳转到指定楼层
楼主
1,上电lcd1602显示Qingqiushu:0
2,1~8按键代表病人编号,9号按键代表应答(每次只能应答一个请求)
3,第二行显示当前请求病人编号,最先请求的编号在左中间空格,有按键按下后刷新显示,先按下的请求键优先级高优先被应答。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]="Qing qiu shu:";
  5. uchar code table1[]="012345678";//键盘
  6. uchar  table2[8];
  7. uint code table3[]={0,1,2,3,4,5,6,7,8};//键盘
  8. uint table4[]={0,0,0,0,0,0,0,0};
  9. uint table5[8];
  10. sbit lcden=P3^4;
  11. sbit lcdrs=P3^5;
  12. sbit dula=P2^6;
  13. sbit wela=P2^7;
  14. uchar num,key,N,s;
  15. uint i,w;
  16. void delay(uint z)
  17. {
  18.         uint x,y;
  19.         for(x=z;x>0;x--)
  20.         for(y=110;y>0;y--);
  21. }
  22. void write_com(uchar com)
  23. {
  24.         lcdrs=0;
  25.         P0=com;
  26.         delay(5);
  27.         lcden=1;
  28.         delay(5);
  29.         lcden=0;
  30. }
  31. void write_data(uchar date)
  32. {
  33.         lcdrs=1;
  34.         P0=date;
  35.         delay(5);
  36.         lcden=1;
  37.         delay(5);
  38.         lcden=0;
  39. }
  40. void init()
  41. {
  42.         dula=0;
  43.         wela=0;
  44.         lcden=0;
  45.         write_com(0x38);
  46.         write_com(0x0c);
  47.         write_com(0x06);
  48.         write_com(0x01);
  49. }
  50. void matrixkeyscan()
  51. {
  52.   
  53.   uchar temp,key;
  54.   if(N>=0||N<=8)
  55.   {
  56.   P1=0xfe;
  57.   temp=P1;
  58.   temp=temp&0xf0;
  59.   if(temp != 0xf0)
  60.   {
  61.     delay(10);
  62.         temp=P1;
  63.         temp=temp & 0xf0;
  64.         if(temp != 0xf0)
  65.         {
  66.           temp=P1;
  67.           switch(temp)
  68.           {  
  69.             case 0xee:key=1;table4[0]+=1;break;
  70.                 case 0xde:key=2;table4[1]+=1;break;
  71.                 case 0xbe:key=3;table4[2]+=1;break;
  72.                 case 0x7e:key=4;table4[3]+=1;break;
  73.            }
  74.            while(temp != 0xf0)
  75.            {
  76.              temp=P1;
  77.                  temp=temp & 0xf0;
  78.                 }
  79.            if(table4[key-1]==1)
  80.            {table5[N]=table3[key];
  81.           table2[N]=table1[key];N++;
  82.           }
  83.         }
  84.    }




  85.    P1=0xfd;
  86.   temp=P1;
  87.   temp=temp&0xf0;
  88.   if(temp != 0xf0)
  89.   {
  90.     delay(10);
  91.         temp=P1;
  92.         temp=temp & 0xf0;
  93.         if(temp != 0xf0)
  94.         {
  95.           temp=P1;
  96.           switch(temp)
  97.           {  
  98.             case 0xed:key=5;table4[4]+=1;break;
  99.                 case 0xdd:key=6;table4[5]+=1;break;
  100.                 case 0xbd:key=7;table4[6]+=1;break;
  101.                 case 0x7d:key=8;table4[7]+=1;break;
  102.            }
  103.            while(temp != 0xf0)
  104.            {
  105.              temp=P1;
  106.                  temp=temp & 0xf0;
  107.                 }
  108.                 if(table4[key-1]==1)
  109.            { table5[N]=table3[key];
  110.           table2[N]=table1[key];N++;
  111.           }
  112.         }
  113.    }




  114.    P1=0xfb;
  115.   temp=P1;
  116.   temp=temp&0xf0;
  117.   if(temp != 0xf0)
  118.   {
  119.     delay(10);
  120.         temp=P1;
  121.         temp=temp & 0xf0;
  122.         if(temp != 0xf0)
  123.         {
  124.           temp=P1;
  125.           switch(temp)
  126.           {  
  127.             case 0xeb:key=9;break;
  128.            }
  129.            while(temp != 0xf0)
  130.            {
  131.              temp=P1;
  132.                  temp=temp & 0xf0;
  133.                 }
  134.                 if(N>0)
  135.                 {
  136.            if(key=9)
  137.            {        
  138.                 w=table5[0];
  139.                         table4[w-1]=table3[0];
  140.                         delay(10);                           
  141.                    for(i=0;i<N;i++)
  142.                         {        table5[ i]=table5[i+1];[ i]
  143.                                 table2[ i]=table2[i+1];[ i]
  144.                         }table2[N]='\0';table5[N]='\0';
  145.                            N--;
  146.            
  147.            }
  148.            }
  149.         }
  150.    }
  151. }
  152. }


  153. void main()
  154. {
  155.         init();
  156.         write_com(0x80);
  157.     ……………………
  158. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

Keil代码与Proteus8.8仿真下载: 仿真程序.7z (56.44 KB, 下载次数: 50)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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