1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3407|回復(fù): 12
收起左側(cè)

單片機(jī)小白,定時1ms,數(shù)碼管依舊閃爍怎么解決?

[復(fù)制鏈接]
ID:719032 發(fā)表于 2020-3-30 19:51 | 顯示全部樓層 |閱讀模式
編程實現(xiàn)前五位數(shù)碼管顯示固定數(shù)字,后兩位數(shù)碼管循環(huán)顯示數(shù)字0~99
定時為1ms,前四位一直閃爍
#include<reg51.h>
#include<intrins.h>
#define SEG1 P0//段碼線
#define SEG2 P1//段碼線
#define SEG3 P3//段碼線
sbit S1=P2^0;//第1個數(shù)碼管公共端  位選線
sbit S2=P2^1;//第2個數(shù)碼管公共端  位選線
sbit S3=P2^2;//第3個數(shù)碼管公共端  位選線
sbit S4=P2^3;//第4個數(shù)碼管公共端  位選線
sbit S5=P2^4;//第5個數(shù)碼管公共端  位選線
void Delayms(unsigned int c);/*延時函數(shù)*/


//unsigned char code DIG_CODE[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x671};//顯示0~F的值 共陰極
//0~F段碼 //顯示0~F的值 共陰極

unsigned char code DIG_CODE[16]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//顯示0~F的值         共陽極
//0~F段碼 //顯示0~F的值         共陽極
void main()
{
                int n;
                while(1)
                  for(n=0;n<=99;n++)
        {
          {       
                S1= 1;S2= 0;S3= 0;S4= 0;S5=0 ;//第1個數(shù)碼管工作 第2/3/4/5個數(shù)碼管不工作
                SEG1 = DIG_CODE[0];         //萬位
                Delayms(1);
                S1= 0;S2= 1;S3= 0;S4= 0;S5=0; //第1/3/4/5個數(shù)碼管不工作 第2個數(shù)碼管工作
                SEG1 = DIG_CODE[6];        //千位
                Delayms(1);
                S1= 0;S2= 0;S3= 1;S4= 0;S5=0; //第1/2/4/5個數(shù)碼管不工作 第3個數(shù)碼管工作
                SEG1 = DIG_CODE[1]; //百位
                Delayms(1);
                S1= 0;S2= 0;S3= 0;S4= 1;S5=0; //第1/2/3/5個數(shù)碼管不工作 第4個數(shù)碼管工作
                SEG1 = DIG_CODE[2];         //十位
                Delayms(1);
                S1= 0;S2= 0;S3= 0;S4= 0;S5=1; //第1/2/3/4個數(shù)碼管不工作 第5個數(shù)碼管工作
                SEG1 = DIG_CODE[3];         //個位
                Delayms(1);       
                         SEG2=        DIG_CODE[n%100/10];
                         SEG3=        DIG_CODE[n%10];
                         Delayms(50);
                }
          
        }                               
}

void Delayms(unsigned int c)                //@12.000MHz
{
        unsigned char i, j;
        while(c--)
        {
                i = 2;
                j = 239;
                do
                {
                        while (--j);
                } while (--i);
        }
}

回復(fù)

使用道具 舉報

ID:235200 發(fā)表于 2020-3-30 21:17 | 顯示全部樓層
把延時程序改為用定時器延時2ms就好了,因為循環(huán)延時不準(zhǔn)確
回復(fù)

使用道具 舉報

ID:114631 發(fā)表于 2020-3-31 04:08 | 顯示全部樓層
主要是Delayms(50);這個太長,導(dǎo)致最后一位顯示時間長,前面的4位顯示時間每位只有Delayms(1),就會引起閃爍。
把Delayms(50)去掉。Delayms(1);改大一點,可以改成Delayms(5);
回復(fù)

使用道具 舉報

ID:584814 發(fā)表于 2020-3-31 10:25 | 顯示全部樓層
從硬件方面,將前幾位信號鎖存就不閃了,如果僅做樣子可以直接短接;
從軟件方面,顯示同步延時,末兩位多次顯示相同內(nèi)容后再加1以求效果。
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2020-3-31 13:34 | 顯示全部樓層
void main()
{
        int n;
        while(1)
?????????
        for(n=0;n<=99;n++)
        {
                {       
回復(fù)

使用道具 舉報

ID:718123 發(fā)表于 2020-3-31 18:53 | 顯示全部樓層
delay函數(shù)的延時問題,建議把delay后面的數(shù)值慢慢調(diào)試,但是用delay函數(shù)的話延時1ms一般都不會很精確,可以采用定時中斷定時1ms。
回復(fù)

使用道具 舉報

ID:201555 發(fā)表于 2020-3-31 22:02 | 顯示全部樓層
整體刷新頻率低于50hz()肯定閃爍,即刷新周期大于20
ms肯定閃爍。
回復(fù)

使用道具 舉報

ID:719032 發(fā)表于 2020-4-1 07:38 來自觸屏版 | 顯示全部樓層
chenalfe2013 發(fā)表于 2020-3-31 04:08
主要是Delayms(50);這個太長,導(dǎo)致最后一位顯示時間長,前面的4位顯示時間每位只有Delayms(1),就會引起閃 ...

把延時改小的話0~99循環(huán)太快就看不清了
回復(fù)

使用道具 舉報

ID:719032 發(fā)表于 2020-4-1 07:41 來自觸屏版 | 顯示全部樓層
wulin 發(fā)表于 2020-3-31 13:34
void main()
{
        int n;

把for語句放在后面前四位閃一下就不亮了
回復(fù)

使用道具 舉報

ID:719032 發(fā)表于 2020-4-1 07:47 來自觸屏版 | 顯示全部樓層
man1234567 發(fā)表于 2020-3-31 10:25
從硬件方面,將前幾位信號鎖存就不閃了,如果僅做樣子可以直接短接;
從軟件方面,顯示同步延時,末兩位多 ...

能給一下具體的程序嗎?我剛剛開始學(xué)這門課,不太理解
回復(fù)

使用道具 舉報

ID:719032 發(fā)表于 2020-4-1 07:49 來自觸屏版 | 顯示全部樓層
起風(fēng)了~ 發(fā)表于 2020-3-31 18:53
delay函數(shù)的延時問題,建議把delay后面的數(shù)值慢慢調(diào)試,但是用delay函數(shù)的話延時1ms一般都不會很精確,可以 ...

定時中斷怎么用?可以具體解釋一下嗎?我剛剛接觸這門課,不太懂
回復(fù)

使用道具 舉報

ID:584556 發(fā)表于 2020-4-1 10:48 | 顯示全部樓層
你這個for循壞加的目的是不是想快速掃描達(dá)到消隱的效果,結(jié)果是不是和你預(yù)想不一樣,首先吶,循環(huán)不用那么多,你有幾個數(shù)碼管就用幾個循環(huán),然后加入你的段選位選信號,然后定時器產(chǎn)生1ms延時。建議寫一個顯示函數(shù),不要在主程序里面寫那么多。
回復(fù)

使用道具 舉報

ID:719032 發(fā)表于 2020-4-1 12:58 來自觸屏版 | 顯示全部樓層
一泓秋 發(fā)表于 2020-4-1 10:48
你這個for循壞加的目的是不是想快速掃描達(dá)到消隱的效果,結(jié)果是不是和你預(yù)想不一樣,首先吶,循環(huán)不用那么 ...

for循環(huán)是為了最后兩位循環(huán)顯示0~99,下面的那些是前五位固定數(shù)字的顯示
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表