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

標題: at89c51單片機按鍵實現八位一體數碼管的遞增顯示程序 [打印本頁]

作者: 1628990936    時間: 2018-12-7 10:58
標題: at89c51單片機按鍵實現八位一體數碼管的遞增顯示程序
at89c2單片機  一個按鍵實現八位一體數碼管的遞增顯示 。按第一次 第一位顯示一個數,
按第二次,第一位數不消失,顯示第二位數,
按第三次,第一位,第二位都不消失,顯示第三位數,以此類推
請大神教我編程序。謝謝。我的電路圖已經畫好了。

八段數碼管 - ISIS Professional (仿真中......)_2.jpg (191.58 KB, 下載次數: 80)

八段數碼管 - ISIS Professional (仿真中......)_2.jpg

八段數碼管 - ISIS Professional (仿真中......)_3.jpg (115.33 KB, 下載次數: 67)

八段數碼管 - ISIS Professional (仿真中......)_3.jpg

八段數碼管 - ISIS Professional (仿真中......).jpg (127.07 KB, 下載次數: 74)

八段數碼管 - ISIS Professional (仿真中......).jpg

作者: 999333    時間: 2018-12-7 16:04
有什么福利
作者: jinsheng7533967    時間: 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);         //將動態時間延長就是你要的效果
                }
        }
}
作者: 1628990936    時間: 2018-12-8 18:28
jinsheng7533967 發表于 2018-12-7 16:04
按你的意思不用接74HC573,數碼管可直接接P2與P3口,代碼如下:
#include
#define uchar unsigned char

大哥 謝謝 你的程序 但是 你編的  沒有按鍵呀
作者: 1628990936    時間: 2018-12-8 18:40
jinsheng7533967 發表于 2018-12-7 16:04
按你的意思不用接74HC573,數碼管可直接接P2與P3口,代碼如下:
#include
#define uchar unsigned char

大哥 我需要 一個按鍵控制呀

作者: 1628990936    時間: 2018-12-9 08:22
yingchun 發表于 2018-12-8 20:48
有用的帖子,收藏了以后學習

兄弟 你會編寫程序嗎
作者: wulin    時間: 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();
        }
}




作者: 小事    時間: 2018-12-9 16:26
這個建議你慢慢學,自己編程才有樂趣,沒有基礎的話,別人的不容易看懂。
作者: jinsheng7533967    時間: 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 放入數組中
作者: 1628990936    時間: 2018-12-9 18:36
wulin 發表于 2018-12-9 12:46
給你寫一個適合做密碼鎖的顯示電路。完全符合你想要的功能。

謝謝 大佬 非常感謝 留個微信吧 我給你發個紅包
作者: 1628990936    時間: 2018-12-9 18:37
jinsheng7533967 發表于 2018-12-9 16:28
給你一個獨立按鍵代碼,你可以自己加進去試試,另外你空間里提到的用74HC573按按鍵保存密碼的事不現實,7 ...

謝謝 大哥,留個vx  我給你發個紅包
作者: 1628990936    時間: 2018-12-14 11:24
wulin 發表于 2018-12-9 12:46
給你寫一個適合做密碼鎖的顯示電路。完全符合你想要的功能。

大哥,如果我想把按鍵顯示結束后,再按一下,然后顯示helly,同時顯示,該怎么修改這個程序呢,請大哥務必幫我,事后必有重謝。
作者: wulin    時間: 2018-12-14 22:36
1628990936 發表于 2018-12-14 11:24
大哥,如果我想把按鍵顯示結束后,再按一下,然后顯示helly,同時顯示,該怎么修改這個程序呢,請大哥務 ...

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

唔,就是 這個 電路圖, 只有一個按鍵,按一下 顯示1,按第二下,顯示1,2.......。按第八下,顯示12345678,按第九下,八位數碼管只顯示helly,就可以了,整個過程只有一個按鍵這個八位的數碼管。
作者: wulin    時間: 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();
        }
}


作者: 1628990936    時間: 2018-12-16 22:22
wulin 發表于 2018-12-16 20:24
#include
#define uchar unsigned char
#define uint  unsigned int

非常完美,謝謝 大哥,想和你交個朋友,做我師傅吧,嘿嘿
作者: 壞學生    時間: 2019-8-5 16:38
jinsheng7533967 發表于 2018-12-7 16:04
按你的意思不用接74HC573,數碼管可直接接P2與P3口,代碼如下:
#include
#define uchar unsigned char

不需要加段鎖存和位鎖存么





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 影音先锋中文字幕在线观看 | 欧美在线一区二区三区 | 欧美不卡 | www.伊人.com| 在线观看亚 | 日韩美av | 日韩免费视频一区二区 | 亚洲免费精品 | 国产一区二区三区四区在线观看 | 精品伊人久久 | 久久av一区二区三区 | 国产精品久久久久久久久久久免费看 | 国产精品a久久久久 | 黄视频免费观看 | 天天躁日日躁xxxxaaaa | 久久久精品一区二区三区 | 美女国产精品 | 一区中文字幕 | 国产乱人伦精品一区二区 | 97影院在线午夜 | 国产一区二区三区免费 | 中文字幕高清在线 | 在线视频 中文字幕 | 欧美日韩三级视频 | 久久精品国产99国产精品 | 国产精品乱码一区二三区小蝌蚪 | 国产精品1区2区3区 国产在线观看一区 | 亚洲婷婷一区 | 午夜成人免费电影 | 午夜小视频免费观看 | 成人国产精品色哟哟 | 一区中文字幕 | 2021狠狠干| 国产成人在线视频免费观看 | 国产91久久久久久久免费 | 亚洲精品一区二三区不卡 | 欧美亚洲视频 | 亚洲国产aⅴ精品一区二区 免费观看av | 国产精品视频免费播放 | 精品久久久久久久久久久久 | 国产精品美女一区二区三区 |