找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2531|回復(fù): 0
收起左側(cè)

Proteus仿真單片機(jī)按鍵識別led控制程序

[復(fù)制鏈接]
ID:399416 發(fā)表于 2020-6-5 13:15 | 顯示全部樓層 |閱讀模式
60034bd6a36187e2b0bbd70e11f4105.png
#include<reg52.h>                 //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型
/********************************************************************
                            初始定義
*********************************************************************/
uchar count=0;   //按鍵計(jì)數(shù),每按一下,count 加1
uchar a,b;           //定義字符型變量
uchar temp;    //定義字符型變量
sbit BUTTON1=P2^0; //定義按鍵的輸入端(為單片機(jī)P2口的P2.0按鍵)
sbit BUTTON2=P2^1;
sbit BUTTON3=P2^2;
sbit BUTTON4=P2^3;
sbit LED1=P2^4;  //LED1
sbit LED2=P2^5;
sbit LED3=P2^6;
sbit LED4=P2^7;
uchar led2flag=0;
uchar led3flag=0;
/********************************************************************
                            延時函數(shù)
*********************************************************************/
void delay10ms(void) //延時程序
{
uchar i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void delay_ms(unsigned int timer)
{
        unsigned int i,j;
        for(i=0; i<timer; i++)
                for(j=0; j<110; j++);
}
/********************************************************************
                           按鍵判斷函數(shù)
*********************************************************************/
void key_scan(void) //按鍵判斷程序
{
        if(BUTTON1==0) //判斷是否按下鍵盤
        {
                delay10ms(); //延時,軟件去干擾
                if(BUTTON1==0) //確認(rèn)按鍵按下
                {
      LED1=0;
                }
          while(BUTTON1==0);//按鍵鎖定,每按一次count 只加1.
          LED1=1;
        }
         if(BUTTON2==0) //判斷是否按下鍵盤
        {
                delay10ms(); //延時,軟件去干擾
                if(BUTTON2==0) //確認(rèn)按鍵按下
                {
      LED2=0;
                }
          while(BUTTON2==0);//按鍵鎖定,每按一次count 只加1.
          led2flag=1;
        }
        if(BUTTON3==0) //判斷是否按下鍵盤
        {
                delay10ms(); //延時,軟件去干擾
                if(BUTTON3==0) //確認(rèn)按鍵按下
                {
      LED3=0;
                        led3flag=1;
                }

        }
        if(BUTTON4==0) //判斷是否按下鍵盤
        {
                delay10ms(); //延時,軟件去干擾
                if(BUTTON4==0) //確認(rèn)按鍵按下
                {
      LED4=~LED4;
                }
          while(BUTTON4==0);//按鍵鎖定,每按一次count 只加1.
         
        }
}

/**********************T0????·??????ò*******************/
        void timer0(void)interrupt 1 using 1
{
        static unsigned int num=0;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        if(led2flag==1)
        {
                num++;
                if(num>200)
                {
                        num=0;
      led2flag=0;
                        LED2=1;
                }
        }
                if(led3flag==1)
        {
                num++;
                if(num>200)
                {
                        num=0;
      led3flag=0;
                        LED3=1;
                }
        }
        
}
/********************************************************************
                            主函數(shù)
*********************************************************************/
void main()
{

  P2=0xff;
        IT0=1;        //INT0?        
  TMOD=0x01;//
        TH0=(65536-50000)/256;//
        TL0=(65536-50000)%256;
        EA=1; //
        ET0=1;//
        EX0=1;//
  TR0=1;//
        while(1)
        {
                key_scan(); //調(diào)用按鍵判斷函數(shù)
        }
}
        
/********************************************************************
                              結(jié)束
*********************************************************************/

全部資料51hei下載地址:
按鍵識別led.rar (57.48 KB, 下載次數(shù): 9)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表