久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2465|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機6x6矩陣鍵盤驅(qū)動程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:718659 發(fā)表于 2020-3-31 14:07 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
自學(xué)了一點單片機知識,寫了一個6x6矩陣鍵盤,用的行列掃描法,P1P3口是鍵盤口,P0是液晶屏口,按下按鍵液晶屏輸出字符,液晶相關(guān)代碼是百度的,大佬們見笑了

電路原理圖如下:


單片機源程序如下:

#include "reg51.h"        
#include <math.h>
#include <stdio.h>

sbit rs=P2^6;            //指令or數(shù)據(jù)  RD
sbit wela=P2^5;          //讀or寫      WR
sbit lcden=P2^7;         //使能信號LCD

unsigned int KeyValue,KeyState;
//************************************************************************/
// 描述: 延時t us函數(shù)
//************************************************************************/
void LCD_Delay_us(unsigned int t)
{
        while(t--);           //t=0,退出
}
//************************************************************************/
// 描述: 延時t ms函數(shù)
//************************************************************************/
void LCD_Delay_ms(unsigned int t)
{
        unsigned int i,j;
        for(i=0;i<t;i++)                       //執(zhí)行t次循環(huán)
        for(j=0;j<113;j++)                     //執(zhí)行113次循環(huán)
        ;
}
//************************************************************************/
// 描述: 1602液晶寫指令
//************************************************************************/
void write_com(unsigned char com)            //1602液晶寫指令
{
        rs=0;                       //寫指令
        lcden=0;                    //使能1602
        P0=com;                     //寫入指令com
        LCD_Delay_ms(1);            //延時1ms
        lcden=1;                    //使能1602
        LCD_Delay_ms(2);            //延時2ms  
        lcden=0;                        //使能1602
}
//************************************************************************/
// 描述:1602液晶寫數(shù)據(jù)
//************************************************************************/
void write_date(unsigned char date)             //1602液晶寫數(shù)據(jù)
{
        rs=1;                        //寫數(shù)據(jù)
        lcden=0;                     //使能1602
        P0=date;                     //寫入數(shù)據(jù)date
        LCD_Delay_ms(1);             //延時1ms
        lcden=1;                     //使能1602
        LCD_Delay_ms(2);             //延時2ms
        lcden=0;                         //使能1602
}
//************************************************************************/
// 描述:指定x,y寫入字符函數(shù)
//************************************************************************/
void W_lcd(unsigned char x,unsigned char y,unsigned char Data)
{     
         if (y == 0){write_com(0x80 + x);}   //第一行  
         else{write_com(0xc0 + x);}          //第二行
         write_date( Data);                  //寫入數(shù)據(jù)
}
//指定x,y寫入字符串函數(shù)
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{     
if (y == 0){write_com(0x80 + x);}                 //第一行
else{write_com(0xC0 + x);}                        //第二行
while (*s)                                        //
         {write_date( *s); s++;}                      //寫入數(shù)據(jù)
}
//************************************************************************/
// 描述:初始化液晶,及畫面初始化
//************************************************************************/
void init_lcd(void)            //初始化液晶,及畫面初始化
{
        wela=0;                      //寫液晶
        lcden=0;                     //使能1602
        write_com(0x38);             //8 位總線,雙行顯示,5X7 的點陣字符
        LCD_Delay_us(100);           //延時100us
        write_com(0x0F);             //開顯示,有光標(biāo),閃爍
        write_com(0x06);             //光標(biāo)右移動
        write_com(0x01);             //清屏
        write_com(0x80);             //DDRAM 地址歸0
}
//鍵盤輸入函數(shù)**********************************************************************
void KeyDown(void)
{
         char a=0;
         P3=0x3f;
         P1=0x00;
         KeyState=0;
          if(P3!=0x3f)//讀取按鍵是否按下
         {
                LCD_Delay_ms(10);//延時10ms進(jìn)行消抖
                if(P3!=0x3f)//再次檢測鍵盤是否按下
                {        
               
                        P3=0x3f;
                        P1=0x00;
                         KeyState=1;
                        switch(P3)            //P3口選擇
                        {
                                case(0x3e):        KeyValue=0;break;
                                case(0x3d):        KeyValue=1;break;
                                case(0x3b): KeyValue=2;break;
                                case(0x37):        KeyValue=3;break;
                                case(0x2f):        KeyValue=4;break;
                                case(0x1f):        KeyValue=5;break;
                        }
               
                        P1=0x3f;               //高低電平對調(diào)
                        P3=0x00;
                        switch(P1)          //檢測P1口
                        {
                                case(0x3e):        KeyValue=KeyValue;break;
                                case(0x3d):        KeyValue=KeyValue+6;break;
                                case(0x3b): KeyValue=KeyValue+12;break;
                                case(0x37):        KeyValue=KeyValue+18;break;
                                case(0x2f):        KeyValue=KeyValue+24;break;
                                case(0x1f):        KeyValue=KeyValue+30;break;
                        //default: KeyValue=0;
                        }
               
                        while(P1!=0x3f)  //檢測按鍵松手檢測
                        {
                                LCD_Delay_ms(10);
                                a++;
                        }
                }
        }
        
}

//***********************************************************************
void main()
{
        unsigned char a[]="0123456789abcdefghigklmnopqrstuvwxyz";
        init_lcd() ;
        while(1)
        {
               
                KeyDown();
                if(KeyState)
                {
    write_date(a[KeyValue]);
          KeyState=0;
          }
   }
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 青青草国产在线观看 | 国产精品久久久久久久久久久免费看 | 久久国产精品-国产精品 | 欧美中文字幕一区二区三区亚洲 | 欧美极品一区二区 | 在线视频a | 先锋资源网站 | 中文字幕在线视频观看 | 午夜在线视频 | 成人av网站在线观看 | 亚洲一区毛片 | 美美女高清毛片视频免费观看 | 亚洲久久| www.蜜桃av| 日本高清在线一区 | 成人小视频在线观看 | 中文字幕在线看第二 | 福利久久| 精品国产一级片 | 自拍第一页| 欧美日本亚洲 | 国产xxx在线观看 | www久| 欧美成人a | 久草资源在线 | 国产日韩精品视频 | 亚洲一区精品视频 | 久久久国产精品 | 亚洲一区二区在线 | 欧美成人a| 刘亦菲国产毛片bd | 国产精品免费观看 | 91精品国产乱码久久久久久久 | 久久精品小视频 | 久久久精彩视频 | 国产成人精品免费视频大全最热 | www.狠狠干 | 国产精品久久久久一区二区三区 | 久www| 欧美一区二区免费 | 国产精品美女久久久久久久久久久 |