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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機獨立按鍵程序按鍵后數字顯示不了?

[復制鏈接]
跳轉到指定樓層
樓主
ID:656213 發表于 2020-11-24 00:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 jiahz2019 于 2020-11-25 11:52 編輯

實驗 : 8個獨立按鍵,在數碼上顯示對應按鍵的8個數字。幫我看一下,有什么問題,按鍵后數字顯示不了

/*****************************************************************************
           獨立按鍵,數碼管顯示,0--8
                   P0口控制數碼管,P1口按鍵
*****************************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //共陽數碼管段碼

void delay(uint ms)
{
        uint i;
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
}
void main(viod)
{
        uchar key;
        P0=0xff;
        P1=0xff;
        while(1)
        {
                if(P1!=0xff)                                //等待按鍵被按下
                {
                        delay(200);
                        if(P1!=0xff)
                        {
                                key=P1;
                                switch(key)
                                {
                                        case 0xfe: P0=led_code[1]; break;
                                        case 0xfd: P0=led_code[2]; break;
                                        case 0xfb: P0=led_code[3]; break;
                                        case 0xf7: P0=led_code[4]; break;
                                        case 0xef: P0=led_code[5]; break;
                                        case 0xdf: P0=led_code[6]; break;
                                        case 0xbf: P0=led_code[7]; break;
                                        case 0x7f: P0=led_code[8]; break;
                                }
                        }
                }
        }
}



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

使用道具 舉報

沙發
ID:716656 發表于 2020-11-24 07:59 來自手機 | 只看該作者
好像按鍵這沒啥問題,,是不是數碼管程序有問題,delay200,是不有點長,再加個松手檢測
回復

使用道具 舉報

板凳
ID:213173 發表于 2020-11-24 08:11 | 只看該作者
樓主對比一下就知道問題所在
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //共陽數碼管段碼

void delay(uint ms)
{
        uint i;
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
}
void main(void)
{
        uchar key;
        P0=led_code[key];
        P1=0xff;
        while(1)
        {
                if(P1!=0xff)      //等待按鍵被按下
                {
                        delay(20);
                        if(P1!=0xff)
                        {       
                                switch(P1)
                                {
                                        case 0xfe: key=1; break;
                                        case 0xfd: key=2; break;
                                        case 0xfb: key=3; break;
                                        case 0xf7: key=4; break;
                                        case 0xef: key=5; break;
                                        case 0xdf: key=6; break;
                                        case 0xbf: key=7; break;
                                        case 0x7f: key=8; break;
                                }
                                P0=led_code[key];
                                while(P1!=0xff);
                        }
                }
        }
}

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:848156 發表于 2020-11-24 08:42 | 只看該作者
延時太長了,需要長時間按著才行,delay(200);改程delay(20);之類的
回復

使用道具 舉報

5#
ID:848156 發表于 2020-11-24 08:43 | 只看該作者
延時太長了,
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //共陽數碼管段碼

void delay(uint ms)
{
        uint i;
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
}
void main(void)
{
        uchar key;
        P0=led_code[key];
        P1=0xff;
        while(1)
        {
                if(P1!=0xff)      //等待按鍵被按下
                {
                        delay(20);
                        if(P1!=0xff)
                        {      
                                switch(P1)
                                {
                                        case 0xfe: key=1; break;
                                        case 0xfd: key=2; break;
                                        case 0xfb: key=3; break;
                                        case 0xf7: key=4; break;
                                        case 0xef: key=5; break;
                                        case 0xdf: key=6; break;
                                        case 0xbf: key=7; break;
                                        case 0x7f: key=8; break;
                                }
                                P0=led_code[key];
                                while(P1!=0xff);
                        }
                }
        }
}
回復

使用道具 舉報

6#
ID:158375 發表于 2020-11-24 11:41 | 只看該作者
程序結構問題:應該在定時中斷里面查按鍵,這樣CPU才能做其他工作。
回復

使用道具 舉報

7#
ID:656213 發表于 2020-11-25 11:50 | 只看該作者
壓著我頭發啦 發表于 2020-11-24 07:59
好像按鍵這沒啥問題,,是不是數碼管程序有問題,delay200,是不有點長,再加個松手檢測

沒有問題么,好的,我再檢查看,謝謝!
回復

使用道具 舉報

8#
ID:656213 發表于 2020-11-27 00:56 | 只看該作者
首先,謝謝樓上各位的解答,這兩天沒得空,今天晚上終于有時間驗證一下了,
按照wulin大師的,我直接復制過去是OK的, 但是我對比著不同點做修改,愣是還不行,我逐句的對比,標點
符號都不放過,最后我修改的還是不行,難道是我書寫的問題?這問題出在哪呢?你們再幫我看看,
下面是我修改過的:
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //共陽數碼管段碼

void delay(uint ms)
{
        uint i;
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
}
void main(viod)
{
        uchar key;
        P0=led_code[key];
        P1=0xff;
        while(1)
        {
                if(P1!=0xff)                                //等待按鍵被按下
                {
                        delay(20);
                        if(P1!=0xff)
                        {
                                switch(P1)
                                {
                                        case 0xfe: key=1; break;
                                        case 0xfd: key=2; break;
                                        case 0xfb: key=3; break;
                                        case 0xf7: key=4; break;
                                        case 0xef: key=5; break;
                                        case 0xdf: key=6; break;
                                        case 0xbf: key=7; break;
                                        case 0x7f: key=8; break;
                                }
                                                                P0=led_code[key];
                                                                while(P1!=0xff);
                        }
                }
        }
}
回復

使用道具 舉報

9#
ID:213173 發表于 2020-11-27 06:00 | 只看該作者
jiahz2019 發表于 2020-11-27 00:56
首先,謝謝樓上各位的解答,這兩天沒得空,今天晚上終于有時間驗證一下了,
按照wulin大師的,我直接復制 ...

從開始你就寫錯關鍵字void main(viod),正確寫法:void main(void)或void main()。
回復

使用道具 舉報

10#
ID:656213 發表于 2020-11-27 10:45 | 只看該作者
wulin 發表于 2020-11-27 06:00
從開始你就寫錯關鍵字void main(viod),正確寫法:void main(void)或void main()。

, 謝謝指點啊,呵呵,看來我還是有點馬虎
回復

使用道具 舉報

11#
ID:656213 發表于 2020-11-27 20:02 | 只看該作者
還有個問題想請教一下, 就是這句之后,      if(P1!=0xff)      //等待按鍵被按下,  如果一直沒有按按鍵,程序是不是一直就等在這里,不往下走了?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕免费在线 | 日本三级网址 | 美女天天操 | 国产精品一卡 | 视频在线一区 | av电影一区 | 99精品一区二区三区 | 久久精品国产99国产精品 | 国产精品成人一区二区三区夜夜夜 | 黄色网一级片 | 国产精品久久国产精品久久 | 中文字幕av第一页 | 黄色中文字幕 | 精品视频在线观看 | 久久97精品 | 97国产精品视频人人做人人爱 | 一区二区久久精品 | 91影院在线观看 | 中文字幕在线看人 | 免费观看视频www | 欧美三级三级三级爽爽爽 | 成人av播放 | 国产乱码精品一区二三赶尸艳谈 | av在线免费观看不卡 | 亚洲欧美视频一区 | 新91| 91精品国产综合久久福利软件 | 粉嫩国产精品一区二区在线观看 | 日韩精品免费播放 | 日韩视频免费看 | 日韩成人在线观看 | 人人玩人人干 | 亚洲免费视频网站 | 久久综合久久久 | 亚洲视频在线一区 | 日韩在线一区二区 | 性色av一区| 日干夜操| 色婷婷久久| 免费亚洲婷婷 | 欧美日韩精品一区 |