[单片机 矩阵键盘实验 实验报告]矩阵键盘实验心得

  实验五 矩阵键盘实验

 一、实验内容

 1、编写程序,做到在键盘上每按一个数字键(0-F)用发光二极管将该代码显示出来。按其它键退出。

 2、加法设计计算器,实验板上有12个按键,编写程序,实现一位整数加法运算功能。可定义“A”键为“+”键,“B”键为“=”键。

 二、实验目的 学习独立式按键的查询识别方法。

 2、 非编码矩阵键盘的行反转法识别方法。

 三、实验说明

 1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。

 2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。

 3、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。

 行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。

 由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。

 行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

 四、接线方法

 键盘连接成4×4的矩阵形式,占用单片机P1口的8根线,行信号是P1.0-1.3,列信号是P1.4-1.7。

 五、实验电路

 参考学习板说明书P14。

 六、参考程序

 程序一:

 /***************************************************************

 功能:4*4矩阵键盘,LED显示所按的键

 作者:txl

 时间:2009-04

 版本:V1.0

 ***************************************************************/

 #include<reg52.h>

 #define uint unsigned int

 #define uchar unsigned char

 sbit wei1=P2^0;

 uchar code table[]={0xC0,0xF9,0xA4,0xB0,

  0x99,0x92,0x82,0xF8,

  0x80,0x90,0x88,0x83,

  0xC6,0xA1,0x86,0x8E};//共阳数码管码表

 //全局变量

 uchar num,temp,num1;

 //函数声明

 void delay(uint z);

 uchar keyscan();

 void display(uchar aa);

 void main()

 {

  num=1;

  wei1=0;

  P0=0xC0;

 

  while(1)

  {

 

  display(keyscan());

  }

 }

 void display(uchar aa)

 {

  P0=table[aa-1];

 }

 uchar keyscan()

 {

  P1=0xfe;

  temp=P1;

  temp=temp&0xf0;

  while(temp!=0xf0)

  {

  delay(5);

  temp=P1;

  temp=temp&0xf0;

  while(temp!=0xf0)

  {

  temp=P1;

  switch(temp)

  {

  case 0xee:num=1;

  break;

  case 0xde:num=2;

  break;

  case 0xbe:num=3;

  break;

  case 0x7e:num=4;

  break;

  }

  while(temp!=0xf0)

  {

  temp=P1;

  temp=temp&0xf0;

  }

  }

  }

  P1=0xfd;

  temp=P1;

  temp=temp&0xf0;

  while(temp!=0xf0)

  {

  delay(5);

  temp=P1;

  temp=temp&0xf0;

  while(temp!=0xf0)

  {

  temp=P1;

  switch(temp)

  {

  case 0xed:num=5;

  break;

  case 0xdd:num=6;

  break;

  case 0xbd:num=7;

  break;

  case 0x7d:num=8;

  break;

  }

  while(temp!=0xf0)

  {

  temp=P1;

  temp=temp&0xf0;

  }

  }

  }

  P1=0xfb;

  temp=P1;

  temp=temp&0xf0;

  while(temp!=0xf0)

  {

  delay(5);

  temp=P1;

  temp=temp&0xf0;

  while(temp!=0xf0)

  {

  temp=P1;

  switch(temp)

  {

  case 0xeb:num=9;

  break;

  case 0xdb:num=10;

  break;

  case 0xbb:num=11;

  break;

  case 0x7b:num=12;

  break;

  }

  while(temp!=0xf0)

  {

  temp=P1;

  temp=temp&0xf0;

  }

  }

  }

  P1=0xf7;

  temp=P1;

  temp=temp&0xf0;

  while(temp!=0xf0)

  {

  delay(5);

  temp=P1;

  temp=temp&0xf0;

  while(temp!=0xf0)

  {

  temp=P1;

  switch(temp)

  {

  case 0xe7:num=13;

  break;

  case 0xd7:num=14;

  break;

  case 0xb7:num=15;

  break;

  case 0x77:num=16;

  break;

  }

  while(temp!=0xf0)

  {

  temp=P1;

  temp=temp&0xf0;

  }

  }

  }

 return num;

 }

 void delay(uint z)

 {

  uint x,y;

  for(x=z;x>0;x--)

  for(y=110;y>0;y--);

 }

 程序二:

 

 #include <REG51.H>

 #define U8 unsigned char

 #define key_port P1

 code U8 kcode[]={0xb7,0xbe,0xde,0xee,0xbd,0xdd,0xed,0xbb,0xdb,0xeb,0xd7,0xe7};

 //反转码对应键值 0 1 2 3 4 5 6 7 8 9 A B

 code U8 disp[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0xff};

 U8 buf[4]={0,0,0,0};

 U8 cnt=0;

 U8 scn[]={0x7f,0xbf,0xdf,0xef};// 先点亮左边一个数码管

 void delay_ms(U8 ms)

 { U8 i,j;

  for(i=0;i<100;i++)

  { for(j=0;j<ms;j++);};

 }

 U8 key(void)

 { U8 a,r;

  delay_ms(20); // 延时20毫秒,消除按键抖动

  if(key_port == 0xf0) goto rn;

  a = key_port;

  key_port = a | 0x0f;

  delay_ms(20);

  a = key_port;

  for (r = 0;r <= 11;r++)

  { if(a == kcode[r]) break;};

  if(r > 11) r = 0xff; //0xff表示无效

 rn: key_port = 0xf0;

  return r;

 }

 void main(void)

 { U8 k,i,pf; // pf为按过加号键的标志

  int p,p1,p2, // p1,p2为两个加数,p为和

  TMOD = 0x01; // 设定时器0为模式1(16位)

  TH0 = 0xee; // 晶振11.0592MHz,5mS

  TL0 = 0;

  TR0 = 1; // 开始计数

  EA = 1; // 允许中断

  ET0 = 1; // 定时器0中断允许

  key_port = 0xf0;

  pf = 0; // 清除加号标志

  p = 0;

  delay_ms(20);

  while(1) // 循环

  { if (key_port != 0xf0)

  { k = key();

  if (k < 10)

  { if((p1==0)&&(p2==0))for(i=0;i<=3;i++) buf[i] = 0;//清空显示缓冲区

  else for(i=1;i<=3;i++) buf[i-1]=buf[i];// 数字左移一位

  buf[3] = k;// 在个位显示刚按的数字

  if(pf==0) p1 = p1 * 10 + k;

  else p2 = p2 * 10 + k;

  }

  else

  { if(pf == 1)

  { p = p1 + p2;

  p1 = 1000;

  for(i=0;i<3;i++)

  { buf[i] = p / p1;

  p = p - p1 * buf[i];

  p1 = p1 / 10;

  }

  buf[3] = p;

  p = 0;

  p1 = 0;

  p2 = 0;

  pf = 0;

  }

  else

  { pf = 1;

  p2 = 0;

  for(k=0;k<=3;k++) buf[k] = 0;

  }

  }

  while(key_port != 0xf0);// 等待按键抬起

  delay_ms(20);

  while(key_port != 0xf0);

  }

  }

 }

 void timeint(void) interrupt 1 // 定时器0中断服务程序

 { unsigned char i,s;

  TH0 = 0xee; // 设置定时器时间常数

  TL0 = 0;

  i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

  P0 = disp[buf[i]]; // 笔划代码送P0口

 P2 = scn[i]; // 控制扫描码送P2口

  cnt++;

 }

 七、 实验小结

 亲爱的朋友,上文已完,为感谢你的阅读,特加送另一篇范文,

 如果下文你不需要,可以下载后编辑删除,谢谢!

 矿井水灾事故专项应急演练方案

 1 应急演练目的、意义和目标

 1.1应急演练目的① 评估我矿水灾事故的应急准备状态,发现并修改我矿水灾事故专项应急预案和执行程序中存在的缺陷和不足;

 ② 评估我矿在发生水灾事故时的应急能力,识别处理水灾事故的资源需求,澄清相关单位和人员的应急职责,改善水灾事故应急救援中的组织协调问题;

 ③ 检验应急响应人员对水灾事故应急预案及执行程序的了解程度和实际操作技能;同时,通过调整演练难度,进一步培训和提高应急响应人员的业务素质和能力;

 ④ 提高全员安全意识。

 1.2应急演练意义:

 为了进一步增强煤矿应对水灾事故的快速反应能力、应急处理能力和协调作战能力,提高米田煤矿的应急救援水平,切实保障人民生命和公司财产的安全,米田煤矿特组织本次应急救援演练。

 1.3应急演练目标

 1.3.1 报警

 当发生水灾事故时,由现场施工单位当班第一责任者采用电话报警的方式进行报警。

 1.3.2接警 处警

 调度室接到事故报警后,调度室调度员立即向当天矿值班长和应急救援领导小组组长(矿长)汇报,同时通知水灾应急演练指挥部有关人员到调度室待命,根据指挥部意见,启动水灾应急救援预案。

 1.3.3 应急指挥

 ① 基层单位:

 一旦发生矿井水灾事故,现场施工单位立即成立水灾事故现场处置小组,掘进队当班第一责任者为小组长。

 ② 矿级应急指挥:

 矿调度室接到事故报警后,矿成立矿井水灾事故应急演练小组,指挥部设在矿调度室。

 1.3.4 应急行动

 ① 基层单位应急行动

 现场组织人员按照避灾路线撤离至安全地点。

 模拟底板涌水的疏、排;

 ② 矿级应急行动

 矿调度室通知相关泵房,由开泵人员立即开动工作、备用水泵开始排水;同时检查检修水泵的完好状况,保证检修水泵能够随时投入运转。

 2 应急演练原则

 ① 安全第一、以人为本的原则。

 ② 统一领导、分级负责的原则。

 ③ 反应迅速、措施果断的原则。

 ④ 部门配合、分工协作的原则。

 3应急演练类型和时间地点

 3.1应急演练类型

 本次演练演练为实战检验性演练

 3.2 应急演练时间

 本次演练时间2012年3月10日八点班9:00-10:35。

 如果演练当日出现特殊情况,应急预案演练可顺延或提前。

 3.3 应急演练地点

 ① 110401运输巷工作面

 ② 矿调度室

 4 应急演练组织机构

 4.1应急演练领导小组

 组 长: 陈 仕

 副组长: 董永海

 成 员:孔家稳 何兴八 张蛮 敖成卫 胡荣兴

  黄志党 李登学 牛建毕 封志平

 职责:负责水灾事故应急演练活动全过程的组织领导,审批决定演练的重大事项。

 4.2策划部

 ①总策划:彭家福

 职责:负责演练准备、演练实施、演练总结的组织实施。

 ②文案组

 组长:孔家稳

 ③协调组

 组长:陈 仕

 ④控制组

 组长:董永海

 4.3 评估组

 共设四个评估组,每组2人。

 (评估组建议由安监队人员组成,每组2人,1人评估,1人记录)

 第一组:

 位置:110401运输巷工作面

 记录和评估水灾演练现场报警、现场处置小组成立及现场应急处置情况

 第二组:

 位置:调度室记录和评估主井采区工作。记录和评估调度室接警、处警、矿井水灾应急演练小组成立、应急指挥部人员到位、应急指挥、协调情况。

 5 演练情景设计

 5.1应急演练概述:

 110401运输巷工作面,目前已施工28m,煤层平均厚度2.62米, 110401运输巷工作面安设有一部能直通调度室的电话。

 2013年3月10日下午3:00时,安全矿长组织召开矿井水灾应急演练预备会议,进一步确认各演练情景准备情况,确认准备完毕后,安全副矿长要求各参演单位及装备务必于2012年3月10日上午8:30分准时到位,2013年3月10日上午9:00时准时开始演练。

 2013年3月10日上午9:00时,该巷工作面后138m,发生掘进工作面滞后突水,突水水量60m3/h。

 2013年3月10日9:00,演练总指挥宣布应急演练开始。

 5.2 演练情景1 报警、现场处置小组成立及现场处置

 地点:110401运输巷工作面

 总指挥宣布演练开始后,调度室用电话通知110401运输巷工作面评估组人员,评估人员通知当班第一责任者演练开始。

 5.2.1 水灾事故发生 撤人

 9:05分,当班第一责任者在掌子头后130m处发现巷道顶板地鼓,随后发生巷道顶板突水,当班第一责任者喊“顶板出水了,人员赶快撤离”,并且立即通知班长,班长带领全部人员撤离到运输石门盘口,当班第一责任者最后撤离,由当班第一责任者在运输石门盘口清点人数。

 5.2.2报警

 当班第一责任者清点人数后,当班第一责任者立即向调度室汇报模拟水灾的具体情况。

 汇报内容为:顶板突水位置、顶板突水大致水量、顶板突水人员撤出情况、支援需要以及现场处置方法。

 5.2.3现场处置小组成立

 当班第一责任者报警后,立即着手成立水灾事故现场处置小组

 组 长:当班第一责任者

 副组长:当班班长

 成 员:当班全体人员

 5.2.4水灾事故现场处置

 110401运输巷顶板突发性涌水,突水点不易堵,应采取疏导措施,现场人员应尽量使涌水沿水沟流入水仓,同时清理水沟及两侧的浮煤、杂物,减少进入水仓的杂物。

 5.3 演练情景2 调度室接警、处警、矿井水灾应急演练小组成立、应急指挥、协调情况。

 地点:调度室

 5.3.1 接警、处警

 9时10分,调度室接到现场报警后,迅速向值班矿长和应急救援领导小组组长(矿长)汇报,同时通知水灾应急演练指挥部有关人员到调度室待命,根据指挥部意见,启动水灾应急演练方案。

 5.3.2 矿井水灾应急演练小组成立

 9时20分,矿井应急演练领导小组成员接到通知后到达调度室,矿井应急演练小组随即成立。

 5.3.3 应急指挥

 调度室电话通知各井下人员撤离。

 5.6 应急结束:

 ① 10时00分,中央水仓向救援小组汇报:中央水仓工作、备用水泵工作正常。

 ② 10时20分,1191机巷汇报:排水路线(自流)沿途浮渣、浮煤、杂物已清理干净,机巷底板突水沿水沟流入井底水仓。

 ④ 调度室接到各处水灾应急演练情况汇报,立即报告应急演练小组,应急救援小组经过认真研究分析,认为本次水灾应急演练目标已全部实现,宣布水灾应急演练全部结束,恢复正常状态。

 6 演练工作准备

 6.1分析演练需求

 ① 人力资源需求

 掘进队20人(其中一名跟班干部,三名班长,井下11名职工,井上5名职工),机电队2人,安检队10人,调度室3人、机电队中央水仓水泵司机2人。

 ② 场地资源需求

 110401运输巷

 调度室

 ③ 物资器材需求

 A、110401运输巷掌子头后5m,供水管路安装三通一个,演练开始后,打开阀门作为模仿水灾水源;

 B、 铁锨、镐各5把(1191机巷演练挖水沟、请浮渣用)

 ④ 文件资料准备

 采掘工程平面图1套

 6.2确定演练范围

 本次应急演练为矿一级应急演练,包括:

 ① 1191机巷水灾事故现场,掘进队处理水灾事故的应急演练;

 ② 调度、指挥系统处理水灾事故应急演练;

 7 演练实施

 7.1演练过程控制

 ① 演练启动方式

 2013年3月10日9:00,演练总指挥宣布应急演练开始,调度室电话通知通知110401运输巷演练开始,掘进队接到通知后,开动预先准备的演练水源,演练正式启动。

 7.2 演练实施的步骤

 ① 演练启动;

 ② 掘进队通知调度室:110401运输巷发生老窑突水位置、突水大致水量、老窑突水人员撤出情况、支援需要以及现场处置方法;

 ③ 掘进队突水现场疏、堵、排措施的落实;

 ④ 调度室的应急响应 调度、指挥系统成立;

 ⑤ 应急演练小组根据各演练场地汇报决定演练是否结束

 7.3、应急演练记录的要求

 演练记录由演练评估组人员填写,演练评估组人员可根据演练具体情况增加内容,演练记录要求做到客观真实,演练记录由调度室负责保存。

 应急演练记录表格如下:

 应 急 演 练 记 录 (场景1)

 演练时间

 2013年3月10日

 地 点

 110401机巷

 参演单位

 掘进队

 水灾事故发生 撤人:

 1、当班第一责任者发现老窑突水,立即通知班长撤人,通知的时间;

 2、班长带领全部人员撤离到回风石门,撤人的速度及时间;

 3、当班第一责任在人员全部撤出后,最后撤离,当班第一责任者撤至运输石门盘口的时间;

 4、由当班第一责任者在运输石门盘口清点人数,清点人数后,记录撤人所用的时间及人员撤出情况;

 报 警:

 当班第一责任制在人员全部撤出后,立即电话报警,记录报警的时间及内容:

 老窑突水位置;

 老窑突水大致水量;

 老窑突水人员撤出情况;

 支援需要以及现场处置方法。

 现场处置小组成立:

 当班第一责任者报警后,负责成立水灾事故现场处置小组:

 组 长:当班第一责任者

 副组长:当班班长

 成 员:当班全体人员

 水灾事故现场处置

 现场处置小组分两队,第一队由当班第一责任者带领,第二队由当班班长带领。

 1、 第一队负责从老窑突水位置至回风上山段清理。

 2 、第二队负责从回风石门交叉口至水仓入水口段清理。

 记录现场处置小组的分队情况,水沟的清理情况及水灾演练涌水流入水仓是否夹有杂物;

 记录人签名

 应 急 演 练 记 录 (场景2)

 演练时间

 2013年3月10日

 地 点

 调度室

 参演单位

 调度室

 接警、处警

 调度室调度员接到现场报警后,向值班矿长汇报事故情况;

 调度员向矿长汇报事故情况;

 调度员通知应急演练指挥部人员到调度室待命;

 水灾应急演练指挥部人员到位情况;

 记录调度员接到事故报警后,通知水灾应急演练指挥部人员的时间,所通知人员到达调度室的时间

 矿井水灾应急演练小组成立

 记录水灾应急演练小组成立的时间,演练小组成立后,分析判断灾情,此次演练灾情不足以水淹矿井,矿井排水系统有能力排水,决定立即中央水仓工作及备用水泵全力排水。

 应急指挥:

 水灾应急演练小组分析判断灾情后,立即通知调度员,调度员立即电话通知中央水仓开动工作及备用水泵全力排水;记录调度员通知两个水仓的时间,两个水仓工作人员接到调度室电话的时间。

 应急结束:

 ① 记录中央水仓向救援小组汇报:中央水仓工作、备用水泵工作正常,检修水泵是否能够随时更换。

 ②记录1191机巷汇报:排水路线(自流)沿途浮渣、浮煤、杂物已清理干净,机巷老窑突水沿水沟流入井底水仓。

 ③④ 记录调度室接到各处汇报,调度员将情况汇报应急演练小组,应急演练小组经过综合分析,确定应急演练目的已到达,具备应急演练结束的条件应急演练小组长宣布应急演练结束,现场矿领导安排参演队伍回到本职岗位,各工作地点恢复到正常状态。

 记录人签名

 7.4 应急演练结束与终止

 7.4.1应急演练结束的条件

 110401运输巷,演练涌水。

 8 应急演练评估

 8.1应急演练评估方法

 应急演练采用表格评估法,评估人员利用提前设计评估表,进行跟踪评定。

 演练评估报告有策划部文案组编写;

 演练评估报告的主要内容一般包括演练执行情况、预案的合理性与可操作性、应急指挥人员的指挥协调能力、参演人员的处置能力、演练目标的实现情况、对完善预案的建议等。

 8.2应急演练评估标准

 水灾应急演练评估表

 序号

 演 练 目 标

 评价标准

 评价分数

 演练得分

 好

 中

 差

 场景1

 水灾事故发生 撤 人

 当班第一责任者发现老窑突水,立即通知班长撤人。

 2

 1.5

 1

 班长带领全部人员撤离到轨道石门盘口,撤人的速度及时间。

 3

 2

 1

 当班第一责任在人员全部撤出后,最后撤离,当班第一责任者撤至轨道石门盘口的时间。

 3

 2

 1

 由当班第一责任者在轨道石门盘口清点人数,清点人数后,记录撤人所用的时间及人员撤出情况。

 2

 1.5

 1

 报 警

 报警的及时性

 2.0

 1.0

 0.5

 报警内容

 底板突水位置

 1.0

 0.8

 0.5

 底板突水大致水量;

 1.0

 0.8

 0.5

 底板突水人员撤出情况

 1.0

 0.8

 0.5

 支援需要以及现场处置方法

 1.0

 0.8

 0.5

 现场处置小组成 立

 现场处置小组成立的及时性

 2.0

 1.5

 1

 在灾害面前,现场处置小组应急状态(好、坏、差)

 3.0

 2

 1.5

 水灾事故现场处 置

 现场处置小组处理灾情的分工

 3

 2.5

 1.5

 现场处置小组处理灾情的积极性

 2

 1.5

 1

 水沟清理情况

 3

 2.5

 1.5

 演练涌水进入水仓前是否有杂物

 2

 1.5

 1

 场景2

 接警、处警

 调度室调度员接到现场报警后,向值班矿长汇报事故情况;

 3

 2.5

 2

 调度员向矿长汇报事故情况;

 2

 1.5

 1.0

 调度员通知应急演练指挥部人员到调度室待命

 3

 2.5

 1.5

 水灾应急演练指挥部人员到位情况;

 2

 1.5

 1.0

 矿井水灾应急演练小组成 立

 水灾应急演练小组成立的及时性

 3

 2.0

 1.5

 水灾应急演练小组分析判断灾情的正确性

 3

 2.0

 1.5

 110401机巷汇报:排水路线(自流)沿途浮渣、浮煤、杂物已清理干净,机巷底板突水沿水沟流入主井水仓。

 2

 1.5

 1.0

 调度室接到各处汇报,调度员将情况汇报应急演练小组,应急演练小组经过综合分析,确定应急演练目的已到达,具备应急演练结束的条件,应急演练小组长宣布应急演练结束。

 3

 1.5

 1.0

 合计

 9 演练安全注意事项

 为确保演练参与人员的安全,应急演练必须遵守以下规定:

 1、演习过程中所有消息或沟通必须以“这是一次水灾事故应急演练”作为开头或结束语,以便保证演习人员和可能受其影响的人员都知道这是一次模拟紧急事件;

 2、参与演练的所有人员必须遵守有关规章制度和安全技术措施,严禁违章作业。

 3、各参演队伍和人员在演练过程中必须听从现场领导的统一指挥,在指定的安全处待命,并不得阻断人行道。

 4、现场参演人员不得随意开动各种机电设备。

 5、当出现真实的紧急情况时,现场人员要在现场领导的统一安排下迅速回到本职岗位。

推荐访问:实验 矩阵 单片机 键盘 报告