单片机原理及应用实验六按键识别数码管显示实验.docx

上传人:b****4 文档编号:6920238 上传时间:2023-05-10 格式:DOCX 页数:8 大小:113.47KB
下载 相关 举报
单片机原理及应用实验六按键识别数码管显示实验.docx_第1页
第1页 / 共8页
单片机原理及应用实验六按键识别数码管显示实验.docx_第2页
第2页 / 共8页
单片机原理及应用实验六按键识别数码管显示实验.docx_第3页
第3页 / 共8页
单片机原理及应用实验六按键识别数码管显示实验.docx_第4页
第4页 / 共8页
单片机原理及应用实验六按键识别数码管显示实验.docx_第5页
第5页 / 共8页
单片机原理及应用实验六按键识别数码管显示实验.docx_第6页
第6页 / 共8页
单片机原理及应用实验六按键识别数码管显示实验.docx_第7页
第7页 / 共8页
单片机原理及应用实验六按键识别数码管显示实验.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机原理及应用实验六按键识别数码管显示实验.docx

《单片机原理及应用实验六按键识别数码管显示实验.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用实验六按键识别数码管显示实验.docx(8页珍藏版)》请在冰点文库上搜索。

单片机原理及应用实验六按键识别数码管显示实验.docx

单片机原理及应用实验六按键识别数码管显示实验

电子信息学院

实验报告书

课程名:

  《单片机原理及应用实验》  

 题  目:

实验六按键识别数码管显示实验 

    软件+硬件实验   

 实验类别:

    【设计】    

班级:

    电子1313  

学  号:

26   

  姓 名:

   吴限   

 

1、实验内容或题目

1)题目:

按键识别数码管显示实验

2)实验内容:

数码管显示矩阵按键号。

2、实验目的与要求

1)实验目的:

掌握按键识别及数码管显示的实现方法。

2)实验要求:

通过XL2000的16位矩阵按键,在数码管上分别显示0~9,A,B,C,D,E,F。

用Keil编译、Proteus仿真,代码下载到单片机实验箱上验证。

3、实验仪器

(1)PC微机             1台

(2)实验箱ﻩﻩﻩﻩ1台

4、实验程序流程图 

 

5、实验程序

(实验程序清单作为附件放在最后)

6、实验步骤

1)keil中C语言程序实现。

2)在proteus中完成电路图设计,并实现仿真。

3)硬件实验部分:

用一条8PIN数据排线,把矩阵按键部份的JP50,接到CPU 部份的P1口JP44;接8位数码管的数据线。

将数码管部份的数据口JP5接到CPU 部份的P0口JP51;接8位数码管的显示位线。

将数码管部份的显示位口JP8接到CPU部份的P2 口JP52.

7、实验数据及结果

8、思考题

采用P3口控制矩阵按键输入,程序应该如何修改?

答:

本实验的程序中可以不用蜂鸣器驱动线,把以下程序的sbitBEEP=P3^7;及函数void beep()等删掉后;需要把扫描键值的函数改一下:

unsignedcharkeyscan()

  unsignedchar scan1, scan2, keycode,j;

 P13= 0xf0;

 scan1= P3;

if(scan1!

=0xf0)  //判键是否按下 

 {

 delayms(10);

ﻩ scan1 =P3;

 if (scan1!

=0xf0)  //二次判键是否按下

{

  P1 = 0x0f;

scan2=P3;

 keycode= scan1| scan2;//组合成键扫描编码

 for(j=0;j<16; j++)

  {

      if(keycode==key_code[j])   //查表得键值

   {

      key=j;

       return(key); //返回有效键值

   }

      }

  }

}

else 

P3 =0xff;

return(key= 16);//返回无效码 

} 即P1口换成P3口,而键编码数组是固定的,可以不变;

此外主函数中的P1口也要改为P3口:

voidmain(void) 

{

P0= 0xf7;//数码管初始显示"-"

 P2=0xfd;//数码管显示在第二位

  P3 =0xff;

 while(1)

keyscan();

 if (key<16)//有效键值

  {

 P0 =disp_code[key];//显示键值

  }

}

}

 

<附件>实验程序清单

#include<reg52.h>

#include

sbitBEEP=P3 ^7;     //蜂鸣器驱动线

unsignedcharkey;

unsigned charcode disp_code[]=

{

    0xf9,0xa4,0xb0,0x99,

ﻩﻩﻩ0x92,0x82,0xf8,0x80,

ﻩ 0x90,0x88,0x83,0xc6,

ﻩﻩﻩﻩ 0xc0,0x86,0x8e,0xc0};ﻩ  

unsignedcharcodekey_code[]= 

{

0xee,0xed,0xeb,0xe7,0xde,0xdd, 0xdb,0xd7, 0xbe,0xbd,0xbb,

 0xb7,0x7e,0x7d,0x7b,0x77//键编码数组

}; 

char codeSST516[3]_at_0x003b; //保留仿真器

/********************延时子函数***************/

voiddelayms(unsignedint ms)

{

  unsigned char t;

 while (ms--) 

 {

    for(t=0;t<114;t++);

   }

} 

/*************x*0.14MS延时子函数****************/ 

voiddelayus(unsigned charx) 

{ 

 unsigned chari;

 while (x--)

 {

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

 {;

} 

  } 

/******************蜂鸣器驱动子函数*****************/

voidbeep()

{

unsignedchari; 

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

{

delayus(6); 

 BEEP=!

BEEP; //BEEP取反

}

 BEEP= 1; //关闭蜂鸣器

delayms(150);  //延时

} 

/******************键盘扫描子函数*********************/

unsignedcharkeyscan()

{

unsigned charscan1, scan2,keycode,j;

P1=0xf0;

  scan1 =P1;

if(scan1!

=0xf0)  //判键是否按下

 {

  delayms(10);  //延时10ms

  scan1 =P1; 

  if(scan1!

=0xf0) //二次判键是否按下 

  { 

  P1= 0x0f;

 scan2=P1;

  keycode =scan1 |scan2;//组合成键扫描编码

  for(j=0; j<16;j++)

  {

   if(keycode ==key_code[j])  //查表得键值

    { 

 key =j; 

    return(key); //返回有效键值

  }

  }

  }

 }

else

 P1 =0xff; 

return (key=16);//返回无效码

} 

/*************************主函数***********************/

voidmain(void)

{

P0= 0xf7;//数码管初始显示"-" 

 P2 = 0xfd;//数码管显示在第二位 

 P1=0xff; 

 while(1) 

  {

keyscan();

  if(key<16)//有效键值

  {

 P0=disp_code[key];//显示键值

 beep();//蜂鸣器响一声 

   }

 }

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2