zoukankan      html  css  js  c++  java
  • 51单片机的独立键盘

    这几天打算好好开始看郭天祥的单片机视频,自己也写了一个独立键盘的51单片机程序,开发环境为Keil C51。

    刚开始看,功能并不是很复杂,由51单片机的P1^7口接LED灯,P0口作为6位数码管的位选线和段选线,6位数码管每次显示相同的数字。位选和段选的控制由P2^7,P2^6口。按键只有一个,一端与地相连,一端接P3^7口。

    当按下按键时,LED灯会发光,同时6位数码管显示的数字加1,从0~F后返回0。松开按键后,LED灯灭。

    闲话少说,上代码:

    #include <reg52.h>
    #define uchar   unsigned char
    
    sbit RDKey=P3^7;
    sbit LED=P1^7;
    sbit dula=P2^6;
    sbit wela=P2^7;
    uchar code   table[]={
    0x3f,0x06,0x5b,0x4f,
    0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,
    0x39,0x5e,0x79,0x71};
    
    void ShortDelay();
    void LongDelay();
    void display(uchar num);
    void main()
    {
    	uchar num=0;
    	RDKey=1;
    	LED=1;
    	while(1)
    	{
    		if(RDKey==0)//键可能被被按下,需要消抖,用到了LongDelay函数
    		{
          LongDelay();
          if(RDKey==0)   //键被按下,Do Something,这里是数码管显示数字
          {
            LED=0;
            //Do something
            display(num);
            num++;
            if(num>=16)
              num=0;
          }
    		}
    		else
    		{
    			LED=1;
    			//Do OtherThing
    		}
    	}
    }
    
    void display(uchar num)
    {
      wela=1;
      P0=0xc0;
      wela=0;
      P0=0xff;
      dula=1;
      P0=table[num];
      dula=0;
      ShortDelay();   //数码管动态显示,用到的是ShortDelay函数
    }
    
    void ShortDelay()
    {
      uchar a=100;
      while(a--);
    }
    
    void LongDelay()
    {
      int a=10000;
      while(a--);
    }


     

  • 相关阅读:
    JSON 操作
    生成下面的模块时,启用了优化或没有调试信息
    Emacs
    Integration rules
    Testing tools
    软件架构(读书笔记1)
    依赖于自己做计算
    POJO
    软件架构(读书笔记2)
    设计得不好
  • 原文地址:https://www.cnblogs.com/xmfbit/p/3872205.html
Copyright © 2011-2022 走看看