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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

4×4矩陣鍵盤的按鍵在lcd上顯示數(shù)字仿真及單片機代碼

  [復(fù)制鏈接]
ID:207443 發(fā)表于 2017-11-5 20:53 | 顯示全部樓層 |閱讀模式
lcd1602顯示矩陣鍵盤的按鍵值的仿真原理圖(proteus工程文件可到本帖附件中下載) 51hei.png
捕獲1.JPG 捕獲.JPG

全部資料51hei下載地址:
4×4矩陣鍵盤的按鍵在lcd上顯示數(shù)字.rar (91.96 KB, 下載次數(shù): 289)

單片機代碼:

#include <reg51.h>
#include <intrins.h>                        //包含_nop_( )空函數(shù)指令的頭文件
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^0;                                         //位變量
sbit RW=P2^1;                                        //位變量
sbit E=P2^2;
void lcd_initial(void);                                                //位變量void lcd _initial(void);                                        //LCD初始化函數(shù)
void check_busy(void);                                 //檢查忙標(biāo)志函數(shù)
void write_command(uchar com);                         //寫命令函數(shù)
void write_data(uchar dat);                        //寫數(shù)據(jù)函數(shù)
void string(uchar ad ,uchar *s);
void delay(uint);                                //延時函數(shù)
unsigned char key_scan()
{
        unsigned char key_temp0,key_temp1;
        unsigned char key_num=0;
        P1=0x0f;
        key_temp0=P1;
        if(key_temp0!=0x0f)
        {
                delay(5);
                key_temp0=P1;
                if(key_temp0!=0x0f)
                {
                        P1=0xf0;
                        key_temp1=P1;
                        if(key_temp0==0x0e)
                        {
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=4;break;
                                        case 0xd0: key_num=3;break;
                                        case 0xb0: key_num=2;break;
                                        case 0x70: key_num=1;break;
                                        default:key_num=0;break;
                                }
                        }
                        else if(key_temp0==0x0d)
                        {
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=8;break;
                                        case 0xd0: key_num=7;break;
                                        case 0xb0: key_num=6;break;
                                        case 0x70: key_num=5;break;
                                        default:key_num=0;break;
                                }
                        }
                        else if(key_temp0==0x0b)
                        {
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=12;break;
                                        case 0xd0: key_num=11;break;
                                        case 0xb0: key_num=10;break;
                                        case 0x70: key_num=9;break;
                                        default:key_num=0;break;
                                }
                        }
                        else if(key_temp0==0x07)
                        {
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=16;break;
                                        case 0xd0: key_num=15;break;
                                        case 0xb0: key_num=14;break;
                                        case 0x70: key_num=13;break;
                                        default:key_num=0;break;
                                }
                        }
                }
        }
return key_num;
}


void main(void)                         //主函數(shù)
{
        unsigned char key_num;
        lcd_initial( );                        //調(diào)用對LCD初始化函數(shù)
   do
   {
                        key_num=key_scan();
                        string(0x82,"Yu Wang wang");                //顯示的第1行字符串
                  switch(key_num)
                        {
                                case 1 :string(0xC8,"1");  break;
                                case 2 :string(0xC8,"2");  break;
                                case 3 :string(0xC8,"3");  break;
                                case 4 :string(0xC8,"4");  break;
                                case 5 :string(0xC8,"5");  break;
                                case 6 :string(0xC8,"6");  break;
                                case 7 :string(0xC8,"7");  break;
                                case 8 :string(0xC8,"8");  break;
                                case 9 :string(0xC8,"9");  break;
                                case 10:string(0xC8,"10"); break;
                                case 11:string(0xC8,"11"); break;
                                case 12:string(0xC8,"12"); break;
                                case 13:string(0xC8,"13"); break;
                                case 14:string(0xC8,"14"); break;
                                case 15:string(0xC8,"15"); break;
                                case 16:string(0xC8,"16"); break;
                        }        
                        delay(100);                         //延時
                        write_command(0x01);                //寫入清屏命令
                        delay(1);                        //延時
         }while(1);
}
void delay(uint j)                        //1ms延時子程序
{
        uchar i=250;
        for(;j>0;j--)
{
                while(--i);
                i=249;
                while(--i);
                i=250;
        }
}
void check_busy(void)                        //檢查忙標(biāo)志函數(shù)
{
        uchar dt;
        do
        {
                dt=0xff;
                E=0;
                RS=0;        
                RW=1;
E=1;
dt=out;
}while(dt&0x80);
E=0;
}
void write_command(uchar com)                 //寫命令函數(shù)
{
check_busy();
E=0;
RS=0;
RW=0;
out=com;
E=1;
_nop_( );
E=0;
delay(1);
}
void write_data(uchar dat)                                 //寫數(shù)據(jù)函數(shù)
{
        check_busy();
        E=0;
        RS=1;
        RW=0;
        out=dat;
        E=1;
        _nop_();
        E=0;
        delay(1);        
}
void LCD_initial(void)                         //液晶顯示器初始化函數(shù)
{
write_command(0x38);        //寫入命令0x38:8位兩行顯示,5×7點陣字符
write_command(0x0C);        //寫入命令0x0C:開整體顯示,光標(biāo)關(guān),無黑塊
write_command(0x06);        //寫入命令0x06:光標(biāo)右移

write_command(0x01);                         //寫入命令0x01:清屏
delay(1);
}
void string(uchar ad,uchar *s)        //輸出顯示字符串的函數(shù)
{
write_command(ad);
while(*s>0)
{
write_data(*s++);                        //輸出字符串,且指針增1
delay(50);
}
}

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:316059 發(fā)表于 2018-4-25 11:38 | 顯示全部樓層
把string(0x82,"Yu Wang wang");     這行屏蔽了 效果就明顯了
回復(fù)

使用道具 舉報

ID:256783 發(fā)表于 2018-6-24 20:23 | 顯示全部樓層
根本沒有工程文件
回復(fù)

使用道具 舉報

ID:414868 發(fā)表于 2018-10-29 17:53 | 顯示全部樓層
有沒有數(shù)碼管的
回復(fù)

使用道具 舉報

ID:632906 發(fā)表于 2019-10-30 20:57 | 顯示全部樓層
代碼沒錯,原理圖也沒錯,為什么就是不顯示呢
回復(fù)

使用道具 舉報

ID:735660 發(fā)表于 2020-4-22 22:51 | 顯示全部樓層
非常好的代碼
回復(fù)

使用道具 舉報

ID:761855 發(fā)表于 2020-5-30 09:43 | 顯示全部樓層
程序下載了,proteus工程文件在那里啊
回復(fù)

使用道具 舉報

ID:382952 發(fā)表于 2020-6-6 09:48 | 顯示全部樓層
附件在哪
回復(fù)

使用道具 舉報

ID:939552 發(fā)表于 2021-6-17 19:37 | 顯示全部樓層
大家不能發(fā)個匯編語言的?我想要學(xué)習(xí)匯編語言
回復(fù)

使用道具 舉報

ID:989272 發(fā)表于 2021-12-8 09:57 | 顯示全部樓層
感謝大佬分析
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久久午夜片 | 精品国产乱码久久久久久丨区2区 | 国产第一页在线播放 | 岛国视频 | 精品伊人久久 | 在线高清免费观看视频 | 亚洲综合色丁香婷婷六月图片 | 91在线网| 亚洲bt 欧美bt 日本bt | 亚洲网站在线观看 | 91九色麻豆| 99免费精品视频 | 欧日韩在线 | 欧美激情黄色 | 97伦理最新伦理 | 亚洲97 | 台湾佬久久 | 在线观看中文字幕 | 亚洲国产一区二区三区在线观看 | 日韩免费视频一区二区 | 精品国产一区二区在线 | 99pao成人国产永久免费视频 | 91精品国产综合久久久久久丝袜 | 综合久久久久久久 | 日本a视频 | 人人干免费 | 日本免费小视频 | 综合精品在线 | 精品毛片在线观看 | 日韩精品免费在线观看 | 黄片毛片免费看 | 色婷婷九月 | 依人成人 | 亚洲综合色丁香婷婷六月图片 | 先锋资源网站 | 蜜臀网站 | 日本福利视频免费观看 | 在线观看中文字幕 | 欧美日韩不卡 | 波多野结衣先锋影音 | 亚洲精品美女在线观看 |