⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 设计一个单片机电路
💻 C
字号:
/*****************************************************************************
程 序 名:实验1-按键,数码管,led综合应用【改进版】
开发环境:Keil
编 写 者:杜镇标
功能简述:设计一个单片机电路,2个按键,1位数码管,4个LED,1个按键按下,
          数码管自增1(up),另一个按键按下,数码管自减1(down),4个LED
          显示数字值。
硬件说明:LS8接在P1.7上,P0.1是8个LED的公共极,本实验要拉低P0.1,
 由于按键和数码以及LED显示都公用P1,程序要分时扫描进行,晶体为12MHz
完成日期:2009.4.23
******************************************************************************/

#include <reg51.h>
//定义位操作
sbit ls0=P0^1;  //LED公共极
sbit ls1=P0^2;     //个位公共极
sbit key=P0^6;         //键盘公共线,见原理图
char mun; //读取的键值
#define Dat P1         //数据输出端
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管数字显示表
// 对应显示            0    1    2    3    4    5    6    7    8    9
unsigned char table[]={0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6}; // 四个led二进制显示
// 对应显示             0    1    2    3    4    5    6    7    8    9

//延时----------------------------
Delay(unsigned int t)
{
 while(t--);
}
//显示----------------------------
void Display(char mun)
{
 unsigned char k,j; 
for(k=0;k<50;k++)
   {
     Dat=table[mun];
	 ls0=0;        //拉低公共线
     Delay(10);
     ls0=1;	
     } 
for(j=0;j<50;j++)
   {
      Dat=tab[mun];
     ls1=0;
     Delay(10);
     ls1=1;	
  }
 Dat=0xff;         //!!!!因为公用P1,所以个子程序用完P1后要恢复为0xff
}
//--键盘扫描程序--------------------------------------
Scankey()
{
 unsigned char i;
 key=0;              //拉低键盘公共线
 if(Dat!=0xff)       //有按键按下
   {
    Delay(1000);      //消抖动
    if(Dat!=0xff)    //的确有键按下
      {
       i=~Dat;       //读取键盘状态,因为键盘按下位=0,抬起=1,所以这里取反便于下面分析
       switch(i)
         {
          case 0x01:mun=mun++;break;   //K1
          case 0x02:mun=mun--;break;   //K2
          default: mun=mun;break;     //其它双键按下不处理,均=0
         }
       switch(mun)
         {
          case -1:mun=9;break;   //过小时
          case 10:mun=0;break;   //过大时
          default: mun=mun;break;     //其它双键按下不处理,均=0
         }
       while(Dat!=0xff) 
         {key=1;            //暂时关闭键盘,不干扰显示
          Display(mun);  //等待按键抬起
          key=0;            //开启键盘检测
         }
      }
   }
 key=1;             //释放键盘公共线
}

//--主程序---------------------------------------------------------
main()
{
  mun=0;             //开机显示"0"
 while(1)
 {
  Display(mun);     //显示
  Scankey();           //键盘扫描
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -