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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2157|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

基于單片機矩陣鍵盤數(shù)碼管所做的計算器問題

[復(fù)制鏈接]
回帖獎勵 5 黑幣 回復(fù)本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:825447 發(fā)表于 2020-10-12 11:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
現(xiàn)在這個計算器僅有加法。出現(xiàn)的問題是計算結(jié)果顯示有時正確有時是亂碼。
/*結(jié)果有時會出現(xiàn)亂碼*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                                                                                0x66,0x6d,0x7d,0x07,
                                                                                0x7f,0x6f};
void delay( uint m )                                        //延時函數(shù)
{
        uint x , y ;
        for( x = m ; x > 0 ; x--)
                for( y = 110 ; y > 0 ; y--);
}        
sbit beep = P3^1  ;                                  //蜂鳴器
uchar firstflot = 0;
int boat = 0 ;
int  second = 0 , third = 0 , m , n ;




int keyscan()                                                        //掃描鍵盤
{
        int temp, num ;
        P2=0x7f;
        temp=P2;
        temp=temp&0x0f;                        //判斷第一行按鍵
        if(temp != 0x0f )
        {
                delay( 10 ) ;
                temp = P2 ;                //重讀P2口值
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch(temp)
                        {
                                case 0x77:        num=1;                                //1
                                                                                firstflot=1 ;
                                                                                break;               
                                case 0x7b:        num=2;                        //2
                                                                                firstflot=1 ;
                                                                                break;               
                                case 0x7d:        num=3;                        //3
                                                                                firstflot=1 ;
                                                                                break;
                                case 0x7e:  num = '+' ;                //+
                                                                                break;
                        }
                        while(temp != 0x0f)                        //等待按鍵釋放
                        {
                                temp = P2;
                                temp = temp & 0x0f;
                        }
                }
        }
        P2 = 0xbf ;                                                                //掃描第二行鍵盤
        temp = P2 ;
        temp = temp & 0x0f;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                //消抖
                temp = P2 ;
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
                                case 0xb7:        num=4;                                //4
                                                                                firstflot=1 ;               
                                                                                break;
                                case 0xbb:        num=5;                        //5
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xbd:        num=6;                        //6
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xbe:        num = '-' ;                //-
                                                                                break;
                        }
                while( temp != 0x0f )
                {
                        temp = P2 ;
                        temp = temp & 0x0f ;
                }
         }
}
        P2 = 0xdf ;                                        //掃描第三行鍵盤
        temp = P2 ;
        temp = temp & 0x0f ;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                        //消抖
                temp = P2 ;
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
                                case 0xd7:        num=7;                        //7
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xdb:  num=8;                        //8
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xdd:        num=9;                        //9
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xde:        num = '*'        ;        //*
                                                                                break;
                        }
                        while( temp != 0x0f )
                        {
                                temp = P2;
                                temp = temp & 0x0f ;
                        }
                }
        }
        P2 = 0xef ;                                                //掃描第四行鍵盤
        temp = P2 ;
        temp = temp & 0x0f ;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                //消抖
                temp = P2 ;
                temp = temp & 0x0f;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
//                                case 0xe7:        printf("num%s",onn)                //歸0
//                                                                                break;
                                case 0xeb:        num = 0 ;                                                //0
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xed:        num = '=' ;                        //=
                                                                                break;
                                case 0xee:        num = '/' ;                                //除
                                                                                break;
                        }
                }
        }
        return num ;
}

/*分模塊完成計算器程序,完成一個模塊后測試能否正常執(zhí)行,能則進(jìn)行下一個*/

/*掃描鍵盤省略*/

int modern_1()                                //輸入第一次數(shù)字
{
        if(firstflot == 1 && second == 0)
        {        
                P0 = 0x7f ;
                m = keyscan() ;
                P1 = table[ m ] ;
                delay( 1 ) ;
                return m ;
        }
        return m ;
}
void modern_2()                                //掃描功能鍵
{
        if(keyscan() == '+')
        {
                P0 = 0xff ;                        //熄滅上位數(shù)字
                delay(100) ;
                firstflot = 0 ;
                second = 1 ;
                boat = 1 ;
        }
}
int modern_3()                        /*再次輸入數(shù)字*/
{
//        int n ;
        if(second == 1 && boat ==1)
        {
                while(1)
                {        
                                        keyscan() ;
                                        if(firstflot == 1)
                                        {        
                                                P0 = 0x7f ;
                                                n = keyscan() ;
                                                P1 = table[ n ] ;
                                                boat = 0 ;
                                        }
                                                return n ;
                }
        }
        return n ;
}
int modern_4()                        /*計算結(jié)果*/
{
        int z ;
        if(keyscan() == '=')
        {                        
                z = m + n ;
                third = 1 ;
                return z ;
        }
        return z ;
}


void modern_5()                                /*輸出結(jié)果*/
{
        int c ;
        if(third == 1)
        {
                c = modern_4() ;
                P0 = 0x7f ;                        /*個位*/
                P1 = table[c%10] ;
                delay(1) ;
                P0 = 0xbf ;                        /*十位*/
                P1 = table[c/10] ;
                delay(1) ;
        }
}

void main()                          /*輸出結(jié)果*/
{
        P0 = 0x7f;
        P1 = table[0] ;
        delay(1) ;
        while(1)
        {        
                keyscan() ;
                modern_1() ;                modern_2() ;
                modern_3() ;                modern_4() ;
                modern_5() ;
        }
}






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

使用道具 舉報

沙發(fā)
ID:586097 發(fā)表于 2020-10-12 11:54 | 只看該作者
顯示屏問題?
回復(fù)

使用道具 舉報

板凳
ID:342954 發(fā)表于 2020-10-12 15:06 | 只看該作者
int modern_4()                        /*計算結(jié)果*/
{
        int z ;
        if(keyscan() == '=')
        {                        
                z = m + n ;
                third = 1 ;
                return z ;
        }
        return z ;
}

在不是"="號值時,Z的變量不確定,這樣就可能會變
回復(fù)

使用道具 舉報

地板
ID:825447 發(fā)表于 2020-10-12 17:01 | 只看該作者
hejianmin 發(fā)表于 2020-10-12 15:06
int modern_4()                        /*計算結(jié)果*/
{
        int z ;

不對啊 ,當(dāng)我按下=結(jié)果z值應(yīng)該確定了


我現(xiàn)在問題是按下=號數(shù)碼管上顯示的結(jié)果有時是亂碼
回復(fù)

使用道具 舉報

5#
ID:829029 發(fā)表于 2020-10-12 22:21 | 只看該作者
int modern_4()                        /*計算結(jié)果*/
{
        int z ;
        if(keyscan() == '=')
        {                        
                z = m + n ;
                third = 1 ;
                return z ;
        }
        return z ;
}

在不是"="號值時,Z的變量不確定,這樣就可能會變
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本精品久久久久久久 | 午夜小视频在线播放 | 国产乱码精品一区二三赶尸艳谈 | 夜夜爽99久久国产综合精品女不卡 | 亚洲欧美视频一区 | 四虎影院在线免费观看 | av日韩在线播放 | 久在线视频播放免费视频 | 精品亚洲一区二区 | 午夜a√| 成人午夜免费福利视频 | 动漫www.被爆羞羞av44 | 福利精品在线观看 | 欧美电影大全 | 日日操夜夜操天天操 | av看片网站| 欧美激情精品久久久久久 | 欧美日韩亚洲成人 | 国产乱码精品一区二区三区五月婷 | 免费视频一区二区 | 波多野结衣二区 | 亚洲欧美日韩精品久久亚洲区 | 欧美福利精品 | 国产精品久久国产精品 | 青青久久 | 看片91| 奇米四色在线观看 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产成人精品免费 | 国产精品精品久久久久久 | 九九精品网 | 免费毛片网站在线观看 | 国产在线精品一区二区三区 | 国产三区在线观看视频 | 午夜影院在线观看免费 | 三级视频网站 | 中文字幕一二三 | 欧美综合一区 | 欧美精品99 | 日韩精品一区二区三区久久 | 成人国产精品免费观看视频 |