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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索

關(guān)于單片機(jī)數(shù)碼管消隱問題

查看數(shù): 2318 | 評(píng)論數(shù): 22 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2024-9-10 11:12

正文摘要:

應(yīng)該是關(guān)于消隱的內(nèi)容沒有弄好,第七位數(shù)碼管的數(shù)字看不到了,各位大佬能幫忙看看到底應(yīng)該怎么改代碼才能得到穩(wěn)定的顯示呢? 數(shù)碼管第七位不顯示 單片機(jī)源程序如下: #include<stc15.h> #define uCha ...

回復(fù)

ID:1109793 發(fā)表于 2024-9-18 07:26
老董 發(fā)表于 2024-9-17 23:27
想請(qǐng)教一下你的stc單片機(jī)是怎么加到軟件里的 我的軟件里沒有這個(gè)

STC的工具軟件里面有個(gè)按鍵
ID:849913 發(fā)表于 2024-9-17 23:27
想請(qǐng)教一下你的stc單片機(jī)是怎么加到軟件里的 我的軟件里沒有這個(gè)
ID:849913 發(fā)表于 2024-9-15 20:20

        P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
   設(shè)置有關(guān)系吧
ID:1109793 發(fā)表于 2024-9-12 13:05

開來就是被系統(tǒng)刪除了
  1. #include <STC89C5xRC.H>//此文件中定義了單片機(jī)的一些特殊功能寄存器


  2. typedef unsigned char u8;   //無符號(hào)字符形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u8 所占位數(shù)8位 范圍0~255
  3. typedef unsigned int u16;   //無符號(hào)整形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u16 所占位數(shù)16位 范圍0~65535

  4. u8 code ma[11]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //數(shù)字"0123456789-" 共陰
  5. u8 code wei[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //位 第一位開始點(diǎn)亮 0x7f  0111 1111 .........
  6. u8 wei_num[8]; //存儲(chǔ)記錄數(shù)碼管8個(gè)段碼位的值 要發(fā)送數(shù)字到哪一位的暫存區(qū)

  7. u8 shi,fen,miao; //時(shí) 分 秒 變量


  8. /*12T 12M晶振 延時(shí)函數(shù) Delay_ms(1)時(shí)大約1ms*/
  9. void Delay_ms(u16 ms)
  10. {
  11.     u8 t;
  12.     while(ms--)
  13.     {
  14.         for(t = 0; t < 98; t ++);
  15.     }
  16. }

  17. /*主函數(shù)*/
  18. void main()
  19. {
  20.         u8 i;
  21.     while(1)
  22.     {
  23.                   /*數(shù)碼管顯示處理*/
  24.         wei_num[7]=ma[shi%100/10];  //顯示 時(shí)
  25.         wei_num[6]=ma[shi%10];      //
  26.         wei_num[5]=ma[10];          //顯示"-"
  27.         wei_num[4]=ma[fen%100/10];  //顯示 分
  28.         wei_num[3]=ma[fen%10];      //
  29.         wei_num[2]=ma[10];          //顯示"-"
  30.         wei_num[1]=ma[miao%100/10]; //顯示 秒
  31.         wei_num[0]=ma[miao%10];     //
  32.                
  33.                  for(i=0; i<8; i++)
  34.         {
  35.             P0=wei_num[i]; //發(fā)送段碼
  36.                         P2=wei[i];     //位
  37.             Delay_ms(1); //間隔一段時(shí)間掃描
  38.             P0=0x00;//消隱
  39.         }
  40.     }
  41. }
復(fù)制代碼
ID:1109793 發(fā)表于 2024-9-12 07:35
  1. #include <STC89C5xRC.H>//此文件中定義了單片機(jī)的一些特殊功能寄存器


  2. typedef unsigned char u8;   //無符號(hào)字符形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u8 所占位數(shù)8位 范圍0~255
  3. typedef unsigned int u16;   //無符號(hào)整形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u16 所占位數(shù)16位 范圍0~65535

  4. u8 code ma[11]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //數(shù)字"0123456789-" 共陰
  5. u8 code wei[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //位 第一位開始點(diǎn)亮 0x7f  0111 1111 .........
  6. u8 wei_num[8]; //存儲(chǔ)記錄數(shù)碼管8個(gè)段碼位的值 要發(fā)送數(shù)字到哪一位的暫存區(qū)

  7. u8 shi,fen,miao; //時(shí) 分 秒 變量


  8. /*12T 12M晶振 延時(shí)函數(shù) Delay_ms(1)時(shí)大約1ms*/
  9. void Delay_ms(u16 ms)
  10. {
  11.     u8 t;
  12.     while(ms--)
  13.     {
  14.         for(t = 0; t < 98; t ++);
  15.     }
  16. }

  17. /*主函數(shù)*/
  18. void main()
  19. {
  20.         u8 i;
  21.     while(1)
  22.     {
  23.                   /*數(shù)碼管顯示處理*/
  24.         wei_num[7]=ma[shi%100/10];  //顯示 時(shí)
  25.         wei_num[6]=ma[shi%10];      //
  26.         wei_num[5]=ma[10];          //顯示"-"
  27.         wei_num[4]=ma[fen%100/10];  //顯示 分
  28.         wei_num[3]=ma[fen%10];      //
  29.         wei_num[2]=ma[10];          //顯示"-"
  30.         wei_num[1]=ma[miao%100/10]; //顯示 秒
  31.         wei_num[0]=ma[miao%10];     //
  32.                
  33.                  for(i=0; i<8; i++)
  34.         {
  35.             P0=wei_num; //發(fā)送段碼
  36.                         P2=wei;     //位
  37.             Delay_ms(1); //間隔一段時(shí)間掃描
  38.             P0=0x00;//消隱
  39.         }
  40.     }
  41. }
復(fù)制代碼
ID:1109793 發(fā)表于 2024-9-12 07:22
1860774xxxx 發(fā)表于 2024-9-11 22:20
我也不知道為什么 后面的i看不到

可能需要使用代碼功能吧
我發(fā)的第二行也有括弧的,實(shí)際上是沒有的
ID:468209 發(fā)表于 2024-9-11 22:20
xiaobendan001 發(fā)表于 2024-9-11 19:49
P0=wei_num; //發(fā)送段碼
P0=wei_num; //發(fā)送段碼

我也不知道為什么 后面的i看不到

IMG_20240911_221824.jpg (643.84 KB, 下載次數(shù): 11)

IMG_20240911_221824.jpg
ID:1109793 發(fā)表于 2024-9-11 19:49
1860774xxxx 發(fā)表于 2024-9-11 19:19
#include //此文件中定義了單片機(jī)的一些特殊功能寄存器

P0=wei_num; //發(fā)送段碼
P0=wei_num; //發(fā)送段碼
ID:468209 發(fā)表于 2024-9-11 19:45
1860774xxxx 發(fā)表于 2024-9-11 19:19
#include //此文件中定義了單片機(jī)的一些特殊功能寄存器



P0=wei_num; //發(fā)送段碼
P2=wei;// 位
這里寫漏了
ID:468209 發(fā)表于 2024-9-11 19:19
qiuqiubuyao 發(fā)表于 2024-9-11 08:18
感謝回復(fù),雖然剛開始我也覺得用for會(huì)更加好,但是因?yàn)槲业臄?shù)據(jù)是分時(shí)分秒來著的,如果單單用for來表示b ...

#include <STC89C5xRC.H>//此文件中定義了單片機(jī)的一些特殊功能寄存器


typedef unsigned char u8;   //無符號(hào)字符形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u8 所占位數(shù)8位 范圍0~255
typedef unsigned int u16;   //無符號(hào)整形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u16 所占位數(shù)16位 范圍0~65535

u8 code ma[11]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //數(shù)字"0123456789-" 共陰
u8 code wei[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //位 第一位開始點(diǎn)亮 0x7f  0111 1111 .........
u8 wei_num[8]; //存儲(chǔ)記錄數(shù)碼管8個(gè)段碼位的值 要發(fā)送數(shù)字到哪一位的暫存區(qū)

u8 shi,fen,miao; //時(shí) 分 秒 變量


/*12T 12M晶振 延時(shí)函數(shù) Delay_ms(1)時(shí)大約1ms*/
void Delay_ms(u16 ms)
{
    u8 t;
    while(ms--)
    {
        for(t = 0; t < 98; t ++);
    }
}

/*主函數(shù)*/
void main()
{
        u8 i;
    while(1)
    {
                  /*數(shù)碼管顯示處理*/
        wei_num[7]=ma[shi%100/10];  //顯示 時(shí)
        wei_num[6]=ma[shi%10];      //
        wei_num[5]=ma[10];          //顯示"-"
        wei_num[4]=ma[fen%100/10];  //顯示 分
        wei_num[3]=ma[fen%10];      //
        wei_num[2]=ma[10];          //顯示"-"
        wei_num[1]=ma[miao%100/10]; //顯示 秒
        wei_num[0]=ma[miao%10];     //
               
                 for(i=0; i<8; i++)
        {
            P0=wei_num; //發(fā)送段碼
                        P2=wei;     //位
            Delay_ms(1); //間隔一段時(shí)間掃描
            P0=0x00;//消隱
        }
    }
}

難道這樣還不夠明朗嗎 加上定時(shí)器加上按鍵就可以了  再說你那按鍵用while(!xx); 按鍵按下是會(huì)卡死 數(shù)碼管消滅
ID:57657 發(fā)表于 2024-9-11 18:27
是否需要消隱看IO口并行位寬,51單片機(jī)為8位并行IO,段碼和位碼做不到并行發(fā)送,所以需要消影處理(先關(guān)閉前一位再打開下一位),是否顯示正常以實(shí)物驗(yàn)證為準(zhǔn)。
用74HC595或273并行鎖存發(fā)送、FPGA、16位并行IO的單片機(jī)驅(qū)動(dòng) 8位8段數(shù)碼管或8*8點(diǎn)陣不需要消影。
ID:619259 發(fā)表于 2024-9-11 15:56
數(shù)碼管動(dòng)態(tài)顯示程序中沒有消隱程序行,在proteus仿真中會(huì)出現(xiàn)一些無序的亂碼或意想不到的顯示錯(cuò)誤。
程序中8個(gè)數(shù)碼管的程序段最后都要加上消隱,以第一個(gè)數(shù)碼管為例:
原程序?yàn)椋?br /> P1=b[0];
P0=a[hour/10];
Delay(10);
加上消隱后程序應(yīng)為(增加一行):
P1=b[0];
P0=a[hour/10];
Delay(10);
P0=0x00;

另外8個(gè)數(shù)碼管的總延時(shí)時(shí)間不要超過20ms,所以每一個(gè)數(shù)碼管的延時(shí)建議選用1ms-2ms為宜。
ID:1109793 發(fā)表于 2024-9-11 11:46
qiuqiubuyao 發(fā)表于 2024-9-11 08:13
感謝回復(fù),我按照您的修改之后顯示確實(shí)好了,之后秒數(shù)的時(shí)間又延長(zhǎng)了,之后在定時(shí)器那里修改之后,時(shí)間問 ...

時(shí)間的操作還有用定時(shí)器吧,顯示方面還好一些,建議使用專用的顯示芯片
ID:1131713 發(fā)表于 2024-9-11 09:51
數(shù)碼管的顯示,要遵循先關(guān)閉,然后驅(qū)動(dòng)segment,然后驅(qū)動(dòng)com,所有共享segment的管都要先關(guān)閉,比如4個(gè)數(shù)字的,6個(gè)數(shù)字一起的,全部都先關(guān)閉com,最后所有數(shù)字配完再開com
ID:1131511 發(fā)表于 2024-9-11 08:18
1860774xxxx 發(fā)表于 2024-9-10 19:38
數(shù)碼管應(yīng)該用for循環(huán)顯示 如:  for(i=0;i

感謝回復(fù),雖然剛開始我也覺得用for會(huì)更加好,但是因?yàn)槲业臄?shù)據(jù)是分時(shí)分秒來著的,如果單單用for來表示b【i】的位置的話,代碼長(zhǎng)度也沒有辦法變短,反而看起來也不夠直觀,所以就直接這樣顯示了,或者您會(huì)有更好的使用方法。
ID:1131511 發(fā)表于 2024-9-11 08:13
xiaobendan001 發(fā)表于 2024-9-10 19:11
在delay(10)之后要換下一位顯示之前要先消隱,比如在移位前先把段驅(qū)動(dòng)P0=0;
要么delay(10)要么delay(10000 ...

感謝回復(fù),我按照您的修改之后顯示確實(shí)好了,之后秒數(shù)的時(shí)間又延長(zhǎng)了,之后在定時(shí)器那里修改之后,時(shí)間問題也基本沒有了,又或者有沒有更好確定時(shí)間精度的辦法呢
ID:462827 發(fā)表于 2024-9-10 23:34
你的數(shù)碼管顯示代碼里根本就沒有消影,還有,掃描的間隔/延時(shí)太短了
ID:344848 發(fā)表于 2024-9-10 21:02
qiuqiubuyao 發(fā)表于 2024-9-10 11:49
我后面發(fā)現(xiàn)應(yīng)該是延時(shí)的問題,但是當(dāng)我把延時(shí)增加到10000后,屏幕閃爍,這樣它的頻率在肉眼上就不夠快且看 ...

視覺暫留時(shí)間,它的長(zhǎng)短因人而異,一般在50~200ms。
若數(shù)碼管為N位,驅(qū)動(dòng)位選的信號(hào)頻率應(yīng)大于N*50Hz。
ID:468209 發(fā)表于 2024-9-10 19:38
數(shù)碼管應(yīng)該用for循環(huán)顯示 如:  for(i=0;i<8;i++) {      
ID:468209 發(fā)表于 2024-9-10 19:38
數(shù)碼管應(yīng)該用for循環(huán)顯示 如:  for(i=0;i<8;i++) {      
ID:1109793 發(fā)表于 2024-9-10 19:11
在delay(10)之后要換下一位顯示之前要先消隱,比如在移位前先把段驅(qū)動(dòng)P0=0;
要么delay(10)要么delay(10000),搞代碼不要這極端。你還可以試試比如delay(100);
又或者使用定時(shí)器獲得更好的效果。
ID:1131511 發(fā)表于 2024-9-10 11:49
我后面發(fā)現(xiàn)應(yīng)該是延時(shí)的問題,但是當(dāng)我把延時(shí)增加到10000后,屏幕閃爍,這樣它的頻率在肉眼上就不夠快且看著很難受,各位大佬有沒有其他更加好的辦法呢

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: a级片免费在线观看 | 毛片aaa| 黄色国产网站 | 欧美日韩一区二区三区 | 特级西西444www大胆免费看 | 成人在线观看网站 | 欧美精品网站 | 黄大色黄大片女爽一次 | 日韩一区二区三区在线 | 日本黄色三级视频 | 视频一区在线观看 | 免费看黄色一级片 | 成人高潮片免费网站 | 欧美日韩一二三区 | 欧美视频久久 | 成人国产精品免费观看 | 国产亚洲一区二区三区 | 亚洲精品免费视频 | 精品一区二区三区免费看 | 国产不卡在线视频 | 免费观看一级毛片 | 在线不欧美 | 久久久国产一区二区三区 | 毛片在线免费 | 免费日韩视频 | 亚洲国产精品suv | 伊人av影院 | 亚洲自拍网站 | 成人免费黄色大片 | 成年人免费看片 | 黄色成年人视频 | 中文在线一区 | 福利网站在线观看 | 久久久久久免费毛片精品 | 欧美激情综合五月色丁香 | 亚洲国产日韩在线 | 久久久久久成人 | 免费av在线网站 | 亚洲一区二区三区视频 | 日本中文在线观看 | 久久久久国产精品视频 |