欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3273|回復: 12
打印 上一主題 下一主題
收起左側

單片機小白,定時1ms,數碼管依舊閃爍怎么解決?

[復制鏈接]
跳轉到指定樓層
樓主
ID:719032 發表于 2020-3-30 19:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
編程實現前五位數碼管顯示固定數字,后兩位數碼管循環顯示數字0~99
定時為1ms,前四位一直閃爍
#include<reg51.h>
#include<intrins.h>
#define SEG1 P0//段碼線
#define SEG2 P1//段碼線
#define SEG3 P3//段碼線
sbit S1=P2^0;//第1個數碼管公共端  位選線
sbit S2=P2^1;//第2個數碼管公共端  位選線
sbit S3=P2^2;//第3個數碼管公共端  位選線
sbit S4=P2^3;//第4個數碼管公共端  位選線
sbit S5=P2^4;//第5個數碼管公共端  位選線
void Delayms(unsigned int c);/*延時函數*/


//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個數碼管工作 第2/3/4/5個數碼管不工作
                SEG1 = DIG_CODE[0];         //萬位
                Delayms(1);
                S1= 0;S2= 1;S3= 0;S4= 0;S5=0; //第1/3/4/5個數碼管不工作 第2個數碼管工作
                SEG1 = DIG_CODE[6];        //千位
                Delayms(1);
                S1= 0;S2= 0;S3= 1;S4= 0;S5=0; //第1/2/4/5個數碼管不工作 第3個數碼管工作
                SEG1 = DIG_CODE[1]; //百位
                Delayms(1);
                S1= 0;S2= 0;S3= 0;S4= 1;S5=0; //第1/2/3/5個數碼管不工作 第4個數碼管工作
                SEG1 = DIG_CODE[2];         //十位
                Delayms(1);
                S1= 0;S2= 0;S3= 0;S4= 0;S5=1; //第1/2/3/4個數碼管不工作 第5個數碼管工作
                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);
        }
}

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

使用道具 舉報

沙發
ID:235200 發表于 2020-3-30 21:17 | 只看該作者
把延時程序改為用定時器延時2ms就好了,因為循環延時不準確
回復

使用道具 舉報

板凳
ID:114631 發表于 2020-3-31 04:08 | 只看該作者
主要是Delayms(50);這個太長,導致最后一位顯示時間長,前面的4位顯示時間每位只有Delayms(1),就會引起閃爍。
把Delayms(50)去掉。Delayms(1);改大一點,可以改成Delayms(5);
回復

使用道具 舉報

地板
ID:584814 發表于 2020-3-31 10:25 | 只看該作者
從硬件方面,將前幾位信號鎖存就不閃了,如果僅做樣子可以直接短接;
從軟件方面,顯示同步延時,末兩位多次顯示相同內容后再加1以求效果。
回復

使用道具 舉報

5#
ID:213173 發表于 2020-3-31 13:34 | 只看該作者
void main()
{
        int n;
        while(1)
?????????
        for(n=0;n<=99;n++)
        {
                {       
回復

使用道具 舉報

6#
ID:718123 發表于 2020-3-31 18:53 | 只看該作者
delay函數的延時問題,建議把delay后面的數值慢慢調試,但是用delay函數的話延時1ms一般都不會很精確,可以采用定時中斷定時1ms。
回復

使用道具 舉報

7#
ID:201555 發表于 2020-3-31 22:02 | 只看該作者
整體刷新頻率低于50hz()肯定閃爍,即刷新周期大于20
ms肯定閃爍。
回復

使用道具 舉報

8#
ID:719032 發表于 2020-4-1 07:38 來自觸屏版 | 只看該作者
chenalfe2013 發表于 2020-3-31 04:08
主要是Delayms(50);這個太長,導致最后一位顯示時間長,前面的4位顯示時間每位只有Delayms(1),就會引起閃 ...

把延時改小的話0~99循環太快就看不清了
回復

使用道具 舉報

9#
ID:719032 發表于 2020-4-1 07:41 來自觸屏版 | 只看該作者
wulin 發表于 2020-3-31 13:34
void main()
{
        int n;

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

使用道具 舉報

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

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

使用道具 舉報

11#
ID:719032 發表于 2020-4-1 07:49 來自觸屏版 | 只看該作者
起風了~ 發表于 2020-3-31 18:53
delay函數的延時問題,建議把delay后面的數值慢慢調試,但是用delay函數的話延時1ms一般都不會很精確,可以 ...

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

使用道具 舉報

12#
ID:584556 發表于 2020-4-1 10:48 | 只看該作者
你這個for循壞加的目的是不是想快速掃描達到消隱的效果,結果是不是和你預想不一樣,首先吶,循環不用那么多,你有幾個數碼管就用幾個循環,然后加入你的段選位選信號,然后定時器產生1ms延時。建議寫一個顯示函數,不要在主程序里面寫那么多。
回復

使用道具 舉報

13#
ID:719032 發表于 2020-4-1 12:58 來自觸屏版 | 只看該作者
一泓秋 發表于 2020-4-1 10:48
你這個for循壞加的目的是不是想快速掃描達到消隱的效果,結果是不是和你預想不一樣,首先吶,循環不用那么 ...

for循環是為了最后兩位循環顯示0~99,下面的那些是前五位固定數字的顯示
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表