標(biāo)題: 怎么讓開(kāi)關(guān)機(jī)時(shí)數(shù)碼管不顯示數(shù)字,按下開(kāi)關(guān)后才顯示數(shù)字 [打印本頁(yè)]

作者: 陌路狂花    時(shí)間: 2017-10-31 22:29
標(biāo)題: 怎么讓開(kāi)關(guān)機(jī)時(shí)數(shù)碼管不顯示數(shù)字,按下開(kāi)關(guān)后才顯示數(shù)字
按下16個(gè)矩陣鍵盤依次在數(shù)碼管上顯示1-16的平方。如按下第一個(gè)顯示1,第二個(gè)顯示4---  , 怎么改 怎么讓開(kāi)關(guān)機(jī)時(shí)數(shù)碼管不顯示數(shù)字,按下開(kāi)關(guān)后才顯示數(shù)字。# include <reg52.h>
# define uint unsigned int
# define uchar unsigned char
       
sbit        P_HC595_SER   = P2^7;        //pin 14        SER                data input
sbit        P_HC595_RCLK  = P2^5;        //pin 12        RCLk        store (latch) clock
sbit        P_HC595_SRCLK = P2^6;        //pin 11        SRCLK        Shift data clock


uchar code t_display[]={
//         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F   //
        0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71, 0x76, 0x79, 0x38, 0x3f, 0};        // ¶ÎÂë
uchar code wei[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
uchar temp;
uint num, num1;
void Send_595(uchar);
void delay(uint);
uint dage();
void display(uchar);
void we(uchar, uchar, uchar);


void main()
{
       
          Send_595(0xff);
                Send_595(0xff);
          P_HC595_RCLK = 0;
                P_HC595_RCLK = 1;
         
          
          while(1)
                {
                        num1 = dage();
               
                        we(num1/100, num1%100/10, num1%10);
                       
                }
}




                       
void Send_595(uchar dat)
{       
        uint         i;
        for(i=0; i<8; i++)
        {
                if(dat & 0x80)        P_HC595_SER = 1;
                else                        P_HC595_SER = 0;
                P_HC595_SRCLK = 0;
                P_HC595_SRCLK = 1;
                dat = dat << 1;
        }
}
void delay(uint z)
{
        uint x, y;
        for(x=z; x>0; x--)
          for(y=110; y>0; y--);
}


uint dage()
{
        P3 = 0xfe;
        temp = P3;
        temp = temp&0xf0;
  while( temp != 0xf0)
        {
                delay(5);
                temp = P3;
                temp = temp&0xf0;
                while( temp != 0xf0)
                {
                                temp = P3;
                                switch(temp)
                                {
                                        case 0xee : num = 1;
                                                 break;
                                        case 0xde : num = 4;
                                                 break;
                                        case 0xbe : num = 9;
                                                 break;
                                        case 0x7e : num = 16;
                                                 break;
                                }
                                while( temp != 0xf0)
                                {
                                        temp = P3;
                                        temp = temp&0xf0;
                                }
                               
                        }
         }
               
                P3 = 0xfd;
                temp = P3;
                temp = temp&0xf0;
                while( temp != 0xf0)
                {
                        delay(5);
                        temp = P3;
                        temp = temp&0xf0;
                        while( temp != 0xf0)
                        {
                                temp = P3;
                                switch(temp)
                                {
                                        case 0xed : num = 25;
                                                 break;
                                        case 0xdd : num = 36;
                                                 break;
                                        case 0xbd : num = 49;
                                                 break;
                                        case 0x7d : num = 64;
                                                 break;
                                 }
                               
                                 while( temp != 0xf0)
                                {
                                        temp = P3;
                                        temp = temp&0xf0;
                                }
                               
                        }
                }
               
                P3 = 0xfb;
                temp = P3;
                temp = temp&0xf0;
                while( temp != 0xf0)
                {
                        delay(5);
                        temp = P3;
                        temp = temp&0xf0;
                        while( temp != 0xf0)
                        {
                                temp = P3;
                                switch(temp)
                                {
                                        case 0xeb : num = 81;
                                                 break;
                                        case 0xdb : num = 100;
                                                 break;
                                        case 0xbb : num = 121;
                                                 break;
                                        case 0x7b : num = 144;
                                                 break;
                                 }
                               
                                 while( temp != 0xf0)
                                {
                                        temp = P3;
                                        temp = temp&0xf0;
                                }
                       
                        }
                }
               
                P3 = 0xf7;
                temp = P3;
                temp = temp&0xf0;
                while( temp != 0xf0)
                {
                        delay(5);
                        temp = P3;
                        temp = temp&0xf0;
                        while( temp != 0xf0)
                        {
                                temp = P3;
                                switch(temp)
                                {
                                        case 0xe7 : num = 169;
                                                 break;
                                        case 0xd7 : num = 196;
                                                 break;
                                        case 0xb7 : num = 225;
                                                 break;
                                        case 0x77 : num = 256;
                                                 break;
                                 }
                               
                                 while( temp != 0xf0)
                                {
                                        temp = P3;
                                        temp = temp&0xf0;
                                }
               
                        }
                }
    return num;
        }










void we(uchar aa, uchar bb, uchar cc)
{
          Send_595(0xfe);
                Send_595(t_display[aa]);
                P_HC595_RCLK = 0;
                P_HC595_RCLK = 1;


         
                Send_595(0xfd);
                Send_595(t_display[bb]);
                P_HC595_RCLK = 0;
                P_HC595_RCLK = 1;


               
                Send_595(0xfb);
                Send_595(t_display[cc]);
                P_HC595_RCLK = 0;
                P_HC595_RCLK = 1;
}


JW-51開(kāi)發(fā)板.pdf

99.63 KB, 下載次數(shù): 4


作者: cjjcjj1    時(shí)間: 2017-11-1 06:10
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 陌路狂花    時(shí)間: 2017-11-1 18:02
如果在后面加一個(gè)延遲函數(shù)后, 為什么還會(huì)出現(xiàn)000 ? 初學(xué)者,多多指教
作者: zl2168    時(shí)間: 2017-11-1 18:44
本帖最后由 zl2168 于 2017-11-1 18:47 編輯

你的問(wèn)題在下例中找到答案
實(shí)例5  4種不同方式鍵控信號(hào)燈
按鍵按能否鎖定可分為有鎖按鍵和無(wú)鎖按鍵。有鎖按鍵是按下即能鎖定閉合狀態(tài),只有再次按一下才能解除閉合狀態(tài),回歸斷開(kāi)狀態(tài)。無(wú)鎖按鍵不能鎖定閉合狀態(tài),除非按住鍵不予釋放,典型的例子就是電腦鍵盤上的按鍵。
單片機(jī)應(yīng)用系統(tǒng)中,根據(jù)按鍵閉合和釋放狀態(tài),有多種不同的鍵控方式,可編寫不同的程序予以實(shí)現(xiàn)。本例要求按以下4種不同方式分別鍵控VD0~ VD3。
① 無(wú)鎖按鍵:S0按下,VD0亮;S0釋放,VD0暗;
② 無(wú)鎖按鍵(前沿有效):S1按下,VD1亮;S1釋放,VD1延時(shí)2s后暗。
③ 無(wú)鎖按鍵(后沿有效):S2按下,VD2亮;S2釋放,VD2亮,并延時(shí)2s后暗。
④ 模擬有鎖按鍵:S3按第一次,VD3亮,并繼續(xù)保持;按第二次,VD3才暗

Proteus仿真一下,確認(rèn)有效。
實(shí)例5 不同方式鍵控?zé)?rar (31.72 KB, 下載次數(shù): 6)
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1.書中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。

作者: 陌路狂花    時(shí)間: 2017-11-1 21:11
怎么改, 能不能寫詳細(xì)點(diǎn)





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1