標題: 如何消除Proteus仿真中數碼管中開始顯示的8. [打印本頁]

作者: chun201302    時間: 2022-5-9 10:57
標題: 如何消除Proteus仿真中數碼管中開始顯示的8.
大家好!請看一下這程序和仿真,要實現的是按下K1,就在左一的數碼管顯3,但按下仿真開始,就出現了右一的數碼管顯示8.,再按k1才顯示3.如何消除按下仿真開始顯示8.請指導和修正一下,謝謝!


以下是單片機程序
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;

//138譯碼器管腳接單片機口
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

//4個獨立按鍵定義單片機口
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;

//共陰極數碼管表碼
u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                  0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值

//延時函數,i=1時,大約延時10us
void delay(u16 i)
{
        while(i--);        
}

//數碼管左一顯示3
void xiangsi1()
{        
        P0 = 0xff;
        LSA=0;LSB=0;LSC=0;        //控制138譯碼器的Y0輸出低電平
        P0=smgduan[3];
       delay(100); //間隔一段時間掃描      
       P0=0x00;//消隱
}


void keypros()//檢測按鍵K1是否按下
{

        if(k1==0)                  //檢測按鍵K1是否按下
        {        
                delay(1000);   //消除抖動 一般大約10ms
                if(k1==0)         //再次判斷按鍵是否按下
                {
                        xiangsi1();        //顯示數字3
                }
                while(!k1);         //檢測按鍵是否松開
        }               
}



void main()
{        
    P0 = 0xff;        
        while(1)
        {
         keypros();
        }

}

獨立按鍵顯示3(程序).rar

16.34 KB, 下載次數: 2

獨立按鍵顯示3(仿真).rar

105.12 KB, 下載次數: 2


作者: wulin    時間: 2022-5-9 12:25
void main()
{        
        P0 = 0x3f;//顯示0
//        P0 = 0x00;//不顯示
        while(1)
        {
                keypros();
        }
}

作者: hy47566398    時間: 2022-5-9 12:47
Y7置高電平
作者: zhxiufan    時間: 2022-5-9 13:06
主程序的開始做一下數據初始化,就可以避免了。
作者: 莫名其    時間: 2022-5-9 13:13
不要給端口懸空即可
作者: yzwzfyz    時間: 2022-5-9 14:08
自己單步調試可以進步并理解。
作者: chun201302    時間: 2022-5-9 17:07
非常感謝大家的回復,學習中。
作者: 名字不是重點    時間: 2022-5-10 16:48
你的573鎖存器不是這么用的!LE和OE必需要有一個是受控的,你這里都不受控,那573有何意義?




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