单片机数码管动态显示编程代码,STC90C51单片机矩阵键盘联动动态数码管

时间:2023-10-14 05:48:20/人气:157 ℃

实验准备

  1. STC90C51单片机一台
  2. P2 GPIO口短接矩阵键盘JP4
  3. GPIO P0 短接动态数码管控制端573
  4. 短接138译码器和动态数码管即J15和J16

实验程序

void MatrixKeyTest(){ char a = 0; int v; KEY=0x0f;//高四位为0 if(KEY != 0x0f){//设置为高四位0,底全是1,读取一下看是不是 Delay(10); if(KEY != 0x0f){//消抖完,再次确认一下 KEY = 0x0f; //重新开始测试,列 switch(KEY){ case(0x07): v=0;break; case(0x0b): v=1;break; case(0x0d): v=2;break; case(0x0e): v=3;break; } KEY = 0xf0; //行 switch(KEY){ case(0x70): v=v;break; case(0xb0): v=v 4;break; case(0xd0): v=v 8;break; case(0xe0): v=v 12;break; } //留大概半秒左右的松手检测,代表着 半秒按键间歇, 不会变化状态,实际上也不需要,因为不检测,只不过会继续循环而已 while(a<50&&KEY!=0xf0){ Delay(20); a ; } while(KEY == 0xf0){ LedOn2(1,(v 1)); if(v 1>9){ LedOn2(0,(v 1)/10); } } } }}

实验程序讲解

矩阵键盘采用行列式扫描,获得案件的序号,即程序中的v。详细过程: 先经过列扫描,得到v列有按钮被选中。然后进行行扫描,得到某行按钮被按下。将列加上行*4(因为每一行一共四个按钮)即得到按钮的序号。按钮的序号通过LedOn2函数点亮动态数码管。第一个参数代表点亮第几个数码管。第二个参数代表具体的数值。详细代码如下:

void LedOn2(int i,int j){ switch(i){ case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } DIG = DIG_CODEHEX[j]; j = 10; while(j--); DIG=0x00;}

其中LSA、LSB、LSC代表着138译码器的sbit,可以根据需要自己定义对应的GPIO口。最后一行是为了消隐,防止当前代码显示到其他的数码管上,可以自己做实验观察差别。

附录

数码管位码:

unsigned char code DIG_CODEHEX[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

推荐

  • 1宽恕怎么造句183
  • 2我的小乌龟生病了周记448
  • 32020年江西萍乡卫生职业学院引进高层次人才公告3人391
  • 4学校领导六一国际儿童节贺词147
  • 5北京智康教育员工待遇,求内部人士告知 智康一对一199
  • 6施工的通告范文416
  • 7最新早安心语正能量语录469
  • 8危险报警闪光灯的使用443
  • 9蜜蜂******如何给它引入蜂箱?200箱中蜂放在一个场地养163
  • 10一亩地玉米利润有多少钱:8亩地的玉米卖9186元算一下利润387
  • 首页/电脑版/地图
    © 2024 OONiu.Com All Rights Reserved.