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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于數碼管問題,我會單個數碼管顯示0到9,如何在這基礎上顯示0-99或0-999?

  [復制鏈接]
跳轉到指定樓層
樓主
#include<reg52.h>
sbit WEI = P1^6;
sbit DU = P1^7;
unsigned char code Disp_Tab[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        //段選
#define uchar unsigned char //  8bit, 0 ~     255
#define uint  unsigned int  // 16bit, 0 ~  65,535
void delayms(uint m)    // 11.0592MHz 晶振ms延時,偏差小于1%
{
    uint i, j;
    for(i=m; i>0; i--)
        for(j=114; j>0; j--);
}


void main()
{
   unsigned char i = 0;  
   WEI = 1;
   P0 = 0X7f;
   WEI = 0;               
   DU = 1;
        while(1)
        {
                for(i = 0; i < 10; i++)                //循環10次
                {
                        P0 =  Disp_Tab[i];
                        delayms(500);
                }
        }
}


QQ截圖20161011115402.png (120.71 KB, 下載次數: 121)

QQ截圖20161011115402.png

QQ截圖20161012212428.png (103.94 KB, 下載次數: 118)

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

使用道具 舉報

沙發
ID:142647 發表于 2016-10-13 21:30 | 只看該作者
好的那就等你看見
回復

使用道具 舉報

板凳
ID:102056 發表于 2016-10-13 22:04 | 只看該作者

數碼管顯示0-99

本帖最后由 king@ 于 2016-10-13 22:13 編輯

#include<reg52.h>
sbit WEI = P1^6;
sbit DU = P1^7;
unsigned char  DISP_smg[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
#define uchar unsigned char //  8bit, 0 ~     255
#define uint  unsigned int  // 16bit, 0 ~  65,535
void delayms(uint m)    // 11.0592MHz 晶振ms延時,偏差小于1%
{
    uint i, j;
    for(i=m; i>0; i--)
        for(j=114; j>0; j--);
}




void main()
{
   unsigned char C0 = 0;
   unsigned char i = 0;
   DU = 0;
   P0 = 0x00;
   DU = 1;
   
        while(1)
        {
                for(i = 0; i < 10; i++)                //循環10次
                {
                    WEI = 1;
                    P0 = 0x7f;
                    WEI = 0;               
                    DU = 1;
                    P0 =  DISP_smg;

                    delayms(400);              
                    WEI = 1;
                    P0 = 0xbf;
                    WEI = 0;
                    DU = 1;
                    P0        =  DISP_smg[C0];
                    delayms(400);        
                    if(i==8)
                    {
                      C0 = C0+1;
                    }
                 


      }        
            
   }
}

數碼管顯示0-99,顯示過程不停得閃爍到了99溢出,延時怎樣修改和到了99怎樣暫停或者返回到00.

QQ截圖20161013221247.png (120.88 KB, 下載次數: 136)

CPU

CPU

QQ截圖20161013221215.png (146.82 KB, 下載次數: 116)

數碼管

數碼管
回復

使用道具 舉報

地板
ID:111634 發表于 2016-10-14 16:21 | 只看該作者
如果真理解了0~9顯示,那么就一定會0~999顯示。不會0~999顯示,就一定沒有真理解了0~9顯示。
回復

使用道具 舉報

5#
ID:148885 發表于 2016-11-20 21:11 | 只看該作者
從個十百依次自加,逢九清零前位加一
回復

使用道具 舉報

6#
ID:138155 發表于 2016-11-22 09:00 | 只看該作者
while(1)
        {
                for(i = 0; i < 10; i++)                //循環10次
                {
                    WEI = 1;
                    P0 = 0x7f;
                    WEI = 0;               
                    DU = 1;
                    P0 =  DISP_smg;
                    delayms(400);              
                    WEI = 1;
                    P0 = 0xbf;
                    WEI = 0;
                    DU = 1;
                    P0        =  DISP_smg[C0];
                   刪掉試試看 0-9      
                    
                 
回復

使用道具 舉報

7#
ID:149388 發表于 2016-11-22 09:19 | 只看該作者
添加循環嵌套
回復

使用道具 舉報

8#
ID:111634 發表于 2016-11-22 11:48 | 只看該作者
繼續計數。
回復

使用道具 舉報

9#
ID:90566 發表于 2016-11-22 12:55 | 只看該作者
用for語句最好
回復

使用道具 舉報

10#
ID:149245 發表于 2016-11-22 15:24 | 只看該作者
分離出個位十位百位等,當各位加到10時候十位進一,個位清零
回復

使用道具 舉報

11#
ID:102056 發表于 2016-11-22 20:04 | 只看該作者
已解決000-999
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P1^7;
sbit wela=P1^6;
uchar num,count;
uint bai=0,shi=0,ge=0;
void display(uint bai,uint shi,uint ge);
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
void delay1ms(void)   //誤差 -0.651041666667us
{
    unsigned char a,b;
    for(b=102;b>0;b--)
        for(a=3;a>0;a--);
}
void main()
{
        TMOD=0x00;
        TH0=(8192-8000)/32;
        TL0=(8192-8000)%32;
        EA=1;
        ET0=1;
        TR0=1;

        while(1)
        {
        display(bai,shi,ge);
        }
        
}
void display(uint bai,uint shi,uint ge)
{   
            bai=num/100;
        shi=(num - (bai*100))/10;
        ge=num%10;


                dula=1;
                P0=0X00;
                dula=0;
                wela=1;
        P0=0x7f;
        wela=0;
        dula=1;
        P0=table[ge];  
        delay1ms();
        
                dula=1;
                P0=0X00;
                dula=0;
                wela=1;
        P0=0xbf;
        wela=0;
        dula=1;
        P0=table[shi];  
        delay1ms();
        
                dula=1;
                P0=0X00;
                dula=0;
                wela=1;
        P0=0xdf;
        wela=0;
        dula=1;
        P0=table[bai];
        delay1ms();


}
void timer0()interrupt 1
{
    TH0=(8192-8000)/32;
    TL0=(8192-8000)%32;
   count++;
   if(count ==125)
   {
        count = 0;
         num++;
        if(num==999)
          num = 0;

   }
}


回復

使用道具 舉報

12#
ID:102056 發表于 2016-11-22 20:09 | 只看該作者
以實測,滿足000-999
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P1^7;
sbit wela=P1^6;
uchar num,count;
uint bai=0,shi=0,ge=0;
void display(uint bai,uint shi,uint ge);
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
void delay1ms(void)   //誤差 -0.651041666667us
{
    unsigned char a,b;
    for(b=102;b>0;b--)
        for(a=3;a>0;a--);
}
void main()
{
        TMOD=0x00;
        TH0=(8192-8000)/32;
        TL0=(8192-8000)%32;
        EA=1;
        ET0=1;
        TR0=1;

        while(1)
        {
        display(bai,shi,ge);
        }
        
}
void display(uint bai,uint shi,uint ge)
{   
            bai=num/100;
        shi=(num - (bai*100))/10;
        ge=num%10;


                dula=1;
                P0=0X00;
                dula=0;
                wela=1;
        P0=0x7f;
        wela=0;
        dula=1;
        P0=table[ge];  
        delay1ms();
        
                dula=1;
                P0=0X00;
                dula=0;
                wela=1;
        P0=0xbf;
        wela=0;
        dula=1;
        P0=table[shi];  
        delay1ms();
        
                dula=1;
                P0=0X00;
                dula=0;
                wela=1;
        P0=0xdf;
        wela=0;
        dula=1;
        P0=table[bai];
        delay1ms();


}
void timer0()interrupt 1
{
    TH0=(8192-8000)/32;
    TL0=(8192-8000)%32;
   count++;
   if(count ==125)
   {
        count = 0;
         num++;
        if(num==999)
          num = 0;

   }
}


回復

使用道具 舉報

13#
ID:149091 發表于 2016-11-22 21:54 | 只看該作者
十位對變量求模,個位對變量求余
回復

使用道具 舉報

14#
ID:55331 發表于 2016-11-26 14:44 | 只看該作者
兩種方法,一種是從0-99,然后這個數字對10取整,將這個數字顯示在十位數的數碼管,對10取余,將這個數字顯示在十位數的數碼管,持續刷新,多少次后,數字加1,對100進行取余,保證數字只有0-100。
一種是0-9顯示,每次對10取余,取余結果在個位上顯示,當取余結果為0時,十位數的數字加1,十位數對10取余,取余結果在十位上顯示。
回復

使用道具 舉報

15#
ID:149853 發表于 2016-11-27 22:36 | 只看該作者
看樓主的程序,你需要了解動態掃描。需要加入位選。
位選的作用就是選擇單片機上的數碼管的某一個數碼管。
位選有單片機的專門i/o口,樓主查下
回復

使用道具 舉報

16#
ID:146734 發表于 2016-11-27 22:40 | 只看該作者
根據經偵,中斷計算一顯示時間,然后根據時間,終斷,進行編程
回復

使用道具 舉報

17#
ID:150441 發表于 2016-11-27 22:53 | 只看該作者
除  和求 余
回復

使用道具 舉報

18#
ID:150661 發表于 2016-11-27 23:49 | 只看該作者
多個數碼管并聯,并且需要改程序
回復

使用道具 舉報

19#
ID:150658 發表于 2016-11-28 11:08 | 只看該作者
可以用定時器中斷寫
回復

使用道具 舉報

20#
ID:150658 發表于 2016-11-28 11:08 | 只看該作者
參考(郭天祥)那本書
回復

使用道具 舉報

21#
ID:150658 發表于 2016-11-28 11:11 | 只看該作者
單純用這種循環的方法解決不好,建議學習一下定時器中斷,那樣你就不知是0~99  0~999啦甚至可以更大
回復

使用道具 舉報

22#
ID:153199 發表于 2016-12-16 18:02 | 只看該作者
增加硬件和程序
回復

使用道具 舉報

23#
ID:155314 發表于 2016-12-16 18:20 | 只看該作者
  1. while(1)//循環部分
  2. {
  3. nuim++;//計數
  4. sum[0]=num/100;//分離百位
  5. sum[1]=num%100/10;;//分離出十位
  6. sum[0]=nuim%10;//分離出個位
  7. for(i=0;i<3;i++)
  8. {
  9. //設置位選
  10. //輸出sum[i]
  11. }

  12. }
復制代碼
回復

使用道具 舉報

24#
ID:102056 發表于 2016-12-16 22:20 | 只看該作者
咆哮的阿杰 發表于 2016-11-27 22:36
看樓主的程序,你需要了解動態掃描。需要加入位選。
位選的作用就是選擇單片機上的數碼管的某一個數碼管。 ...

明明我數碼管顯示先寫消影再寫位選之后寫了段選最后寫個延時就是為了使數碼管動態顯示
回復

使用道具 舉報

25#
ID:102056 發表于 2016-12-16 22:23 | 只看該作者

while(1)//循環部分
{
nuim++;//計數
sum[0]=num/100;//分離百位
sum[1]=num%100/10;;//分離出十位
sum[0]=nuim%10;//分離出個位              應該改成sum[2]=nuim%10;
for(i=0;i<3;i++)
{
//設置位選
//輸出sum
}

}
回復

使用道具 舉報

26#
ID:156793 發表于 2016-12-22 11:02 | 只看該作者
動態掃描
回復

使用道具 舉報

27#
ID:156899 發表于 2016-12-22 16:46 | 只看該作者
原理圖Kian起來好亂啊
回復

使用道具 舉報

28#
ID:150126 發表于 2016-12-23 15:13 | 只看該作者
把位選改下就行了
回復

使用道具 舉報

29#
ID:153199 發表于 2016-12-25 18:56 | 只看該作者
感謝樓主分享,真心不錯
回復

使用道具 舉報

30#
ID:271665 發表于 2018-1-4 21:51 | 只看該作者
樓主怎么讓數碼管顯示某一個數字時,用按鍵暫停顯示,同時要求發光二極管閃爍??
回復

使用道具 舉報

31#
ID:271741 發表于 2018-1-5 00:36 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

32#
ID:469510 發表于 2019-6-27 10:39 | 只看該作者
謝謝分享,剛好用到!
回復

使用道具 舉報

33#
ID:307020 發表于 2019-6-28 08:42 | 只看該作者
非常經典的例程,幾乎每一本C51編程的書里都有,感謝樓主給大家增加黑幣的機會。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩一区二区三区在线观看 | 在线精品一区 | av毛片在线免费观看 | 台湾av在线 | a中文在线视频 | 81精品国产乱码久久久久久 | 成人一区av | 在线视频 中文字幕 | 欧美黑人一区二区三区 | 亚洲精品资源 | 午夜电影一区二区 | 亚洲国产成人av好男人在线观看 | 在线欧美亚洲 | 在线小视频 | 亚洲成人中文字幕 | 久久久蜜臀国产一区二区 | 97精品超碰一区二区三区 | 亚洲一区电影 | 亚洲九九 | 亚洲国产网 | 在线视频成人 | 成年人精品视频 | 婷婷午夜天| 真人女人一级毛片免费播放 | 国内精品视频在线 | 色久影院 | 婷婷综合色 | 久久国产综合 | 免费看色| av片在线观看 | 欧美日韩福利视频 | 亚洲一区二区三区视频在线 | 久久久久久久av | 免费午夜视频在线观看 | 国产精品1| 美女福利网站 | 超碰91在线 | 国产91在线观看 | 亚洲视频中文字幕 | 精品精品视频 | 夜夜爽99久久国产综合精品女不卡 |