欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

at89c51單片機按鍵實現八位一體數碼管的遞增顯示程序

查看數: 8907 | 評論數: 17 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2018-12-7 10:58

正文摘要:

at89c2單片機  一個按鍵實現八位一體數碼管的遞增顯示 。按第一次 第一位顯示一個數, 按第二次,第一位數不消失,顯示第二位數, 按第三次,第一位,第二位都不消失,顯示第三位數,以此類推 請大神教 ...

回復

ID:21069 發表于 2018-12-7 16:04
按你的意思不用接74HC573,數碼管可直接接P2與P3口,代碼如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

//段碼表   注意:是共陽數碼管
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//位碼表
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//延時
void delay_mS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}

void main()
{
        uchar i,j;
        while(1)
        {       
                for(j=0;j<8;j++)
                {
                        P2=0x00;
                        P2=duan[j];            //發送段碼
                        P3=wei[j];             //發送位碼
                        delay_mS(100);         //將動態時間延長就是你要的效果
                }
        }
}

評分

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

查看全部評分

ID:516586 發表于 2019-8-5 16:38
jinsheng7533967 發表于 2018-12-7 16:04
按你的意思不用接74HC573,數碼管可直接接P2與P3口,代碼如下:
#include
#define uchar unsigned char

不需要加段鎖存和位鎖存么
ID:441506 發表于 2018-12-16 22:22
wulin 發表于 2018-12-16 20:24
#include
#define uchar unsigned char
#define uint  unsigned int

非常完美,謝謝 大哥,想和你交個朋友,做我師傅吧,嘿嘿
ID:213173 發表于 2018-12-16 20:24
1628990936 發表于 2018-12-16 18:06
唔,就是 這個 電路圖, 只有一個按鍵,按一下 顯示1,按第二下,顯示1,2.......。按第八下,顯示1234567 ...



#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int

sbit dula=P3^0;  //HL-1
sbit wela=P3^1; //HL-1
sbit key =P3^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                    0x6d,0x7d,0x07,0x7f,0x6f};
uchar code table1[]={0x00,0x76,0x79,0x38,0x38,0x6e,0x00,0x00};//HELLY
uchar data dis_buf[8];
uint num=0;

void keyscan()//按鍵程序        
{
        static uchar count;        //計數消抖變量                        
        static bit key_sign=0;        //按鍵自鎖標志
        uchar a;
        if(key==0)                                //檢測輸入如果為0
        {
                if((++count>=100)&&(key_sign==0))
                {                        
                        key_sign=1;                //按鍵自鎖標志置1,防止重復響應
                        num++;
                        dis_buf[0]=num;
                        for(a=8;a>0;a--)
                                dis_buf[a]=dis_buf[a-1];
                        if(num>9)
                                num=0;
                }
        }
        else
        {
                count=0;                                //計數變量清0
                key_sign=0;                                //按鍵自鎖標志清0
        }
}
void display()//顯示程序
{
        static uchar i=0,j;        //計數變量
        if(++j>100)//調整數碼管刷新頻率
        {
                j=0;
                P2=0x00;
                dula=1;
                dula=0;
                switch(i)
                {
                        case 0:
                        P2=0xfe;
                        wela=1;
                        wela=0;
                        if(num>7)
                        {
                                if(num==9)
                                P2=table1[0];
                                else
                                P2=table[dis_buf[8]];
                        }
                        else P2=0x00;
                        dula=1;
                        dula=0;
                        i++;
                        break;

                        case 1:                                
                        P2=0xfd;
                        wela=1;
                        wela=0;
                        if(num>6)
                        {
                                if(num==9)
                                P2=table1[1];
                                else
                                P2=table[dis_buf[7]];
                        }
                        else P2=0x00;
                        dula=1;
                        dula=0;
                        i++;
                        break;

                        case 2:                                
                        P2=0xfb;
                        wela=1;
                        wela=0;
                        if(num>5)
                        {
                                if(num==9)
                                P2=table1[2];
                                else
                                P2=table[dis_buf[6]];
                        }
                        else P2=0x00;
                        dula=1;
                        dula=0;
                        i++;
                        break;

                        case 3:                                       
                        P2=0xf7;
                        wela=1;
                        wela=0;
                        if(num>4)
                        {
                                if(num==9)
                                P2=table1[3];
                                else
                                P2=table[dis_buf[5]];
                        }
                        else P2=0x00;
                        dula=1;
                        dula=0;
                        i++;
                        break;

                        case 4:        
                        P2=0xef;
                        wela=1;
                        wela=0;
                        if(num>3)
                        {
                                if(num==9)
                                P2=table1[4];
                                else
                                P2=table[dis_buf[4]];
                        }
                        else P2=0x00;
                        dula=1;
                        dula=0;
                        i++;
                        break;

                        case 5:        
                        P2=0xdf;
                        wela=1;
                        wela=0;
                        if(num>2)
                        {
                                if(num==9)
                                P2=table1[5];
                                else
                                P2=table[dis_buf[3]];
                        }
                        else P2=0x00;
                        dula=1;
                        dula=0;
                        i++;
                        break;

                        case 6:        
                        P2=0xbf;
                        wela=1;
                        wela=0;
                        if(num>1)
                        {
                                if(num==9)
                                P2=table1[6];
                                else
                                P2=table[dis_buf[2]];
                        }
                        else P2=0x00;
                        dula=1;
                        dula=0;
                        i++;
                        break;

                        case 7:        
                        P2=0x7f;
                        wela=1;
                        wela=0;
                        if(num>0)
                        {
                                if(num==9)
                                P2=table1[7];
                                else
                                P2=table[dis_buf[1]];
                        }
                        else P2=0x00;
                        dula=1;
                        dula=0;
                        i=0;
                        break;
                }
        }
}
void main()
{
        while(1)
        {
                keyscan();
                display();
        }
}

ID:441506 發表于 2018-12-16 18:06
wulin 發表于 2018-12-14 22:36
你是想用數碼管顯示字符“helly”嗎?不太明白你的意思。

唔,就是 這個 電路圖, 只有一個按鍵,按一下 顯示1,按第二下,顯示1,2.......。按第八下,顯示12345678,按第九下,八位數碼管只顯示helly,就可以了,整個過程只有一個按鍵這個八位的數碼管。
ID:213173 發表于 2018-12-14 22:36
1628990936 發表于 2018-12-14 11:24
大哥,如果我想把按鍵顯示結束后,再按一下,然后顯示helly,同時顯示,該怎么修改這個程序呢,請大哥務 ...

你是想用數碼管顯示字符“helly”嗎?不太明白你的意思。
ID:441506 發表于 2018-12-14 11:24
wulin 發表于 2018-12-9 12:46
給你寫一個適合做密碼鎖的顯示電路。完全符合你想要的功能。

大哥,如果我想把按鍵顯示結束后,再按一下,然后顯示helly,同時顯示,該怎么修改這個程序呢,請大哥務必幫我,事后必有重謝。
ID:441506 發表于 2018-12-9 18:37
jinsheng7533967 發表于 2018-12-9 16:28
給你一個獨立按鍵代碼,你可以自己加進去試試,另外你空間里提到的用74HC573按按鍵保存密碼的事不現實,7 ...

謝謝 大哥,留個vx  我給你發個紅包
ID:441506 發表于 2018-12-9 18:36
wulin 發表于 2018-12-9 12:46
給你寫一個適合做密碼鎖的顯示電路。完全符合你想要的功能。

謝謝 大佬 非常感謝 留個微信吧 我給你發個紅包
ID:21069 發表于 2018-12-9 16:28
1628990936 發表于 2018-12-8 18:28
大哥 謝謝 你的程序 但是 你編的  沒有按鍵呀

給你一個獨立按鍵代碼,你可以自己加進去試試,另外你空間里提到的用74HC573按按鍵保存密碼的事不現實,74HC573是鎖存器(當使能位低電平時,鎖存你剛從P/I口送去的數據,P/I口再來的數據據之門外;當使能位高電平時,輸出隨P/I口變化),不是記憶芯片,不可能保存你說的所謂密碼,只能用動態掃描掃出你要的數字。另外網上有很多獨立按鍵的與數碼管的視頻教程,多看幾次,多敲幾次就明白了。

void PORT_key(void)
{
        if(key == 0)            //將你的按鍵位定意為key
        {
                delay(10);          //消抖
                if(key == 0)
                {
                        while(key == 0);//松手
                        i++;  //不知你的變量是不是i
                }
        }
}

再將此代碼放入while(1)中.去掉for的8次循環,i 放入數組中
ID:442704 發表于 2018-12-9 16:26
這個建議你慢慢學,自己編程才有樂趣,沒有基礎的話,別人的不容易看懂。
ID:213173 發表于 2018-12-9 12:46
本帖最后由 wulin 于 2018-12-9 16:23 編輯

給你寫一個適合做密碼鎖的顯示電路。完全符合你想要的功能。



#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int

sbit dula=P3^0;  //HL-1
sbit wela=P3^1; //HL-1
sbit key =P3^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                    0x6d,0x7d,0x07,0x7f,0x6f};
uchar data dis_buf[9];
uint num=0;

void keyscan()//按鍵程序        
{
        static uchar count;        //計數消抖變量                        
        static bit key_sign=0;        //按鍵自鎖標志
        uchar a;
        if(key==0)                                //檢測輸入如果為0
        {
                if((++count>=100)&&(key_sign==0))
                {                        
                        key_sign=1;                //按鍵自鎖標志置1,防止重復響應
                        num++;
                        if(num>=9)
                                num=0;
                        dis_buf[0]=num;
                        for(a=8;a>0;a--)
                                dis_buf[a]=dis_buf[a-1];
                }
        }
        else
        {
                count=0;                                //計數變量清0
                key_sign=0;                                //按鍵自鎖標志清0
        }
}
void display()//顯示程序
{
        static uchar i=0,j;        //計數變量
        if(++j>100)//調整數碼管刷新頻率
        {
                j=0;
                P2=0x00;
                dula=1;
                dula=0;
                switch(i)
                {
                        case 0:
                                P2=0xfe;
                                wela=1;
                                wela=0;
                                if(num>7)
                                P2=table[dis_buf[8]];
                                else P2=0x00;
                                dula=1;
                                dula=0;
                                i++;
                        break;
                        case 1:                                
                                P2=0xfd;
                                wela=1;
                                wela=0;
                                if(num>6)
                                P2=table[dis_buf[7]];
                                else P2=0x00;
                                dula=1;
                                dula=0;
                                i++;
                        break;
                        case 2:                                
                                P2=0xfb;
                                wela=1;
                                wela=0;
                                if(num>5)
                                P2=table[dis_buf[6]];
                                else P2=0x00;
                                dula=1;
                                dula=0;
                                i++;
                        break;
                        case 3:                                       
                                P2=0xf7;
                                wela=1;
                                wela=0;
                                if(num>4)
                                P2=table[dis_buf[5]];
                                else P2=0x00;
                                dula=1;
                                dula=0;
                                i++;
                        break;
                        case 4:        
                                P2=0xef;
                                wela=1;
                                wela=0;
                                if(num>3)
                                P2=table[dis_buf[4]];
                                else P2=0x00;
                                dula=1;
                                dula=0;
                                i++;
                        break;
                        case 5:        
                                P2=0xdf;
                                wela=1;
                                wela=0;
                                if(num>2)
                                P2=table[dis_buf[3]];
                                else P2=0x00;
                                dula=1;
                                dula=0;
                                i++;
                        break;
                        case 6:        
                           P2=0xbf;
                           wela=1;
                           wela=0;
                                if(num>1)
                                P2=table[dis_buf[2]];
                                else P2=0x00;
                                dula=1;
                                dula=0;
                                i++;
                        break;
                        case 7:        
                                P2=0x7f;
                                wela=1;
                                wela=0;
                                if(num>0)
                                P2=table[dis_buf[1]];
                                else P2=0x00;
                                dula=1;
                                dula=0;
                                i=0;
                        break;
                }
        }
}
void main()
{
        while(1)
        {
                keyscan();
                display();
        }
}



ID:441506 發表于 2018-12-9 08:22
yingchun 發表于 2018-12-8 20:48
有用的帖子,收藏了以后學習

兄弟 你會編寫程序嗎
ID:441506 發表于 2018-12-8 18:40
jinsheng7533967 發表于 2018-12-7 16:04
按你的意思不用接74HC573,數碼管可直接接P2與P3口,代碼如下:
#include
#define uchar unsigned char

大哥 我需要 一個按鍵控制呀
ID:441506 發表于 2018-12-8 18:28
jinsheng7533967 發表于 2018-12-7 16:04
按你的意思不用接74HC573,數碼管可直接接P2與P3口,代碼如下:
#include
#define uchar unsigned char

大哥 謝謝 你的程序 但是 你編的  沒有按鍵呀
ID:222948 發表于 2018-12-7 16:04
有什么福利

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表