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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5118|回復: 4
打印 上一主題 下一主題
收起左側

at89c51 3x3矩陣鍵盤實現led顯示按鍵1-9 哪里錯了

[復制鏈接]
跳轉到指定樓層
樓主
ID:189690 發表于 2017-4-17 12:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg51.h>
#define key P0//定義按鍵端口
#define uchar unsigned char
sbit line0=P0^0;//定義行線
sbit line1=P0^1;
sbit line2=P0^2;
char led[]={0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//定義led顯示字行碼
char scancode2[]={0xef,0xdf};
bit iskey()//判斷是否有按鍵閉合
{
        key=0x07;//低三位為1,高三位為0
        if((key&0x07)==0x07)//屏蔽高三位(列線),只檢測低三位(行線)
                return 0;//沒有按鍵閉合
        else
                return 1;//有按鍵閉合
}
uchar key_identify()//識別建號
{
        uchar linecode=0,i,rowcode=0,scancode=0xf7;//初始化掃描碼,第一列為0,其他為1
        for(i=0;i<3;i++)//掃描三列
        {
                key=scancode;//輸出掃描碼,掃描各列
                if((key&0x07)==0x07)//屏蔽高三位(列線),只檢測低三位(行線)
                {                 
                        rowcode++;//無按鍵閉合
                        scancode=scancode2[rowcode-1];//輸出0的列線每次左移一位
                }
                else//已確定列號,再確定行號
                {
                        if(line0==0)linecode=0;
                        if(line1==0)linecode=3;
                        if(line2==0)linecode=6;
break;
                }
        }
        return (linecode+rowcode);//輸出鍵號
}
void wait_key_release()//等按鍵松開
{
        while(1)
        {
                key=0x07;//低三位為1,高三位為0
                if((key&0x07)==0x07)break;//讀行線狀態,如果為高電平,則沒有按鍵閉合,鍵盤松開
        }
}
void display(uchar n)//led顯示數字
{
       
                P1=led[n];
                P0=0xff;
       
       
}
        int main(void)
        {
                uchar keycode;//保存鍵號
                unsigned int i;
                while(1)
                {
                        while(!iskey());//如果沒有按鍵按下,等待
                        for(i=0;i<500;i++);//消抖
                        if(iskey())//檢測是否有按鍵
                        {
                                keycode=key_identify();//識別鍵號
                                wait_key_release();//等待按鍵松開
                                display(keycode);//顯示
                        }
                }
        }
仿真時P0.0 P0.1 P0.2電平是灰的 按鍵沒反應 詳情見附件

矩陣鍵盤led顯示.rar

19.08 KB, 下載次數: 53

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

使用道具 舉報

沙發
ID:7485 發表于 2017-4-17 19:26 | 只看該作者
int main(void)
        {
                uchar keycode;//保存鍵號
                unsigned int i;
                while(1)
                {
                        while(!iskey());//如果沒有按鍵按下,等待
                        for(i=0;i<500;i++);//消抖
                        if(iskey())//檢測是否有按鍵
                        {
                                keycode=key_identify();//識別鍵號
                                wait_key_release();//等待按鍵松開
                                display(keycode);//顯示
                        }
                }
        }

調用顯示函數的語句放在這兒不對。如果沒有鍵按下就不會顯示。
回復

使用道具 舉報

板凳
ID:149451 發表于 2017-4-17 19:47 | 只看該作者
單片機的應用記。篜0口需加上拉電阻。你把它加上試試,有驚喜喲。。!你的程序仿真了,沒錯的,可以正常顯示。
回復

使用道具 舉報

地板
ID:190593 發表于 2017-4-17 20:25 | 只看該作者
51單片機P0口要接1k或者10k的上拉
回復

使用道具 舉報

5#
ID:189690 發表于 2017-4-18 18:47 | 只看該作者
確實是沒加電阻的問題 10k電阻還是顯示不了 470Ω就可以了  此貼完結 謝謝大家
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产线视频精品免费观看视频 | 欧美精品一区在线发布 | 亚洲欧美中文日韩在线v日本 | 国产成人av免费看 | 91av久久久| 在线观看 亚洲 | av网站免费在线观看 | 中国一级特黄毛片大片 | 狠狠的干狠狠的操 | 欧美精品一区二区免费 | 亚洲欧洲日韩 | 国产精品视频一区二区三区, | 国产精品亚洲二区 | jizjizjiz中国护士18 | 中文成人在线 | 免费成人高清在线视频 | 综合久久综合久久 | 亚洲欧美另类在线观看 | 嫩草一区二区三区 | av成年人网站 | 久久精品一区 | 国产精品久久久爽爽爽麻豆色哟哟 | 久久69精品久久久久久久电影好 | 日日天天| 日日夜夜精品免费视频 | av黄色在线 | 久久精品 | 日韩国产黄色片 | 男女午夜激情视频 | 国产在线www | 成人在线不卡 | 国内自拍偷拍 | 久久国产精品免费一区二区三区 | 色999视频 | 国产欧美综合在线 | 欧美亚洲综合久久 | 久久久久久久久久久久久91 | 午夜免费影视 | 日本福利在线观看 | 久久伊人在 | 狠狠的干狠狠的操 |