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

標(biāo)題: 51單片機(jī)6x6矩陣鍵盤(pán)驅(qū)動(dòng)程序 [打印本頁(yè)]

作者: laojichaoyue    時(shí)間: 2020-3-31 14:07
標(biāo)題: 51單片機(jī)6x6矩陣鍵盤(pán)驅(qū)動(dòng)程序
自學(xué)了一點(diǎn)單片機(jī)知識(shí),寫(xiě)了一個(gè)6x6矩陣鍵盤(pán),用的行列掃描法,P1P3口是鍵盤(pán)口,P0是液晶屏口,按下按鍵液晶屏輸出字符,液晶相關(guān)代碼是百度的,大佬們見(jiàn)笑了

電路原理圖如下:


單片機(jī)源程序如下:

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

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

unsigned int KeyValue,KeyState;
//************************************************************************/
// 描述: 延時(shí)t us函數(shù)
//************************************************************************/
void LCD_Delay_us(unsigned int t)
{
        while(t--);           //t=0,退出
}
//************************************************************************/
// 描述: 延時(shí)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液晶寫(xiě)指令
//************************************************************************/
void write_com(unsigned char com)            //1602液晶寫(xiě)指令
{
        rs=0;                       //寫(xiě)指令
        lcden=0;                    //使能1602
        P0=com;                     //寫(xiě)入指令com
        LCD_Delay_ms(1);            //延時(shí)1ms
        lcden=1;                    //使能1602
        LCD_Delay_ms(2);            //延時(shí)2ms  
        lcden=0;                        //使能1602
}
//************************************************************************/
// 描述:1602液晶寫(xiě)數(shù)據(jù)
//************************************************************************/
void write_date(unsigned char date)             //1602液晶寫(xiě)數(shù)據(jù)
{
        rs=1;                        //寫(xiě)數(shù)據(jù)
        lcden=0;                     //使能1602
        P0=date;                     //寫(xiě)入數(shù)據(jù)date
        LCD_Delay_ms(1);             //延時(shí)1ms
        lcden=1;                     //使能1602
        LCD_Delay_ms(2);             //延時(shí)2ms
        lcden=0;                         //使能1602
}
//************************************************************************/
// 描述:指定x,y寫(xiě)入字符函數(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);                  //寫(xiě)入數(shù)據(jù)
}
//指定x,y寫(xiě)入字符串函數(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++;}                      //寫(xiě)入數(shù)據(jù)
}
//************************************************************************/
// 描述:初始化液晶,及畫(huà)面初始化
//************************************************************************/
void init_lcd(void)            //初始化液晶,及畫(huà)面初始化
{
        wela=0;                      //寫(xiě)液晶
        lcden=0;                     //使能1602
        write_com(0x38);             //8 位總線,雙行顯示,5X7 的點(diǎn)陣字符
        LCD_Delay_us(100);           //延時(shí)100us
        write_com(0x0F);             //開(kāi)顯示,有光標(biāo),閃爍
        write_com(0x06);             //光標(biāo)右移動(dòng)
        write_com(0x01);             //清屏
        write_com(0x80);             //DDRAM 地址歸0
}
//鍵盤(pán)輸入函數(shù)**********************************************************************
void KeyDown(void)
{
         char a=0;
         P3=0x3f;
         P1=0x00;
         KeyState=0;
          if(P3!=0x3f)//讀取按鍵是否按下
         {
                LCD_Delay_ms(10);//延時(shí)10ms進(jìn)行消抖
                if(P3!=0x3f)//再次檢測(cè)鍵盤(pán)是否按下
                {        
               
                        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;               //高低電平對(duì)調(diào)
                        P3=0x00;
                        switch(P1)          //檢測(cè)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)  //檢測(cè)按鍵松手檢測(cè)
                        {
                                LCD_Delay_ms(10);
                                a++;
                        }
                }
        }
        
}

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






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 中文日韩在线视频 | 一区影院 | 久久久婷 | 国产黄色电影 | 久久99精品久久久久久青青日本 | 91网在线播放 | 91在线视频国产 | 黄色一级免费 | 久久久久国产精品午夜一区 | 午夜精品久久久久久久久久久久久 | 色综合天天天天做夜夜夜夜做 | 久久在线 | 视频一区二区三区在线观看 | 精品国产乱码久久久久久丨区2区 | 午夜看片 | 欧州一区二区三区 | 毛片免费观看视频 | 天天拍天天色 | 日本a级大片 | 成人二区 | 欧美成人手机视频 | 日韩中文字幕一区二区三区 | 高清国产午夜精品久久久久久 | 嫩草一区二区三区 | 欧美日韩高清在线一区 | 欧美日韩电影免费观看 | 秋霞国产 | 国产精品日韩欧美一区二区 | а天堂中文最新一区二区三区 | 国产线视频精品免费观看视频 | 国产激情网 | 久久一区二区三区四区 | 在线观看免费av网 | 91中文字幕在线观看 | 久久精品视频免费观看 | 国产一区高清 | 亚洲一区在线日韩在线深爱 | 亚洲成人在线免费 | 亚洲视频在线免费 | 日韩精品免费 | 国产欧美日韩在线播放 |