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

QQ登錄

只需一步,快速開始

搜索

關(guān)于單片機(jī)+74HC164芯片控制數(shù)碼管有很明顯跳動(dòng)的疑問(wèn)

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

正文摘要:

本人用單片機(jī)驅(qū)動(dòng)74HC164芯片串入并出驅(qū)動(dòng)數(shù)碼管,結(jié)果發(fā)現(xiàn)數(shù)碼管顯示一直有很明顯跳動(dòng) 我認(rèn)為是我的serial_Output函數(shù)有問(wèn)題,于是加了個(gè)_nop_()延時(shí),可是抖動(dòng)還是很明顯,本人想不出如何修改,望指教 ...

回復(fù)

ID:213173 發(fā)表于 2019-3-1 15:18
admin 發(fā)表于 2019-3-1 15:11
您好,代碼用這個(gè)框起來(lái)就不會(huì)丟失[ i]和[ b]了,或者改為[ i]和[ b](中間加個(gè)空格)

樣例子

謝謝指教
ID:1 發(fā)表于 2019-3-1 15:11
wulin 發(fā)表于 2019-3-1 14:53
為什么代碼傳上來(lái)回丟掉好些方括號(hào)???管理員知道這個(gè)問(wèn)題嗎???

您好,代碼用這個(gè)框起來(lái)就不會(huì)丟失[ i]和[ b]了,或者改為[ i]和[ b](中間加個(gè)空格)

樣例子


  1. 代碼[i]
  2. 代碼[i]
  3. 代碼[i]
  4. 代碼[i]
  5. 代碼[i]
  6. 代碼[i]

復(fù)制代碼




ID:213173 發(fā)表于 2019-3-1 14:53
為什么代碼傳上來(lái)回丟掉好些方括號(hào)???管理員知道這個(gè)問(wèn)題嗎???
ID:213173 發(fā)表于 2019-3-1 11:13
主要原因是你消隱沒(méi)有處理好,在傳輸段碼過(guò)程中要關(guān)閉數(shù)碼管。否則在仿真時(shí)會(huì)閃爍,在實(shí)際電路中可能會(huì)有鬼影。給你把程序修改了一下就正常了。




  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define u8 unsigned char
  4. #define u16 unsigned int

  5. u8 code seg[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff, 0xaa};
  6. const u16 m[] = {10000, 1000, 100, 10};//數(shù)位分解所用權(quán)值表
  7. u16 val = 42950;  //所演示的起始值                                                                                                                 //分解以后的存放緩沖
  8. u8 Buf[5];
  9. sbit DAT = P3^4; //串行數(shù)據(jù)線
  10. sbit CLK = P3^7; //串行時(shí)鐘線
  11. sbit Hide= P3^5; //消隱

  12. void delayms(u16 ms)
  13. {
  14.         u8 i;        
  15.         while(ms--)
  16.                 for(i = 0; i < 120; i++);
  17. }

  18. void Decompose(u16 x, u8 d[])   //分解顯示數(shù)據(jù)val
  19. {                                                                                                                                   //分解整數(shù)x
  20.         u8 i;        
  21.         for(i=0;i<4;i++)
  22.         {
  23.                 d[i]= 0;
  24.                 while(x>=m[i])
  25.                 {
  26.                         x -= m[i];
  27.                         d[i]++;
  28.                 }
  29.         }
  30.         d[4] = x;
  31. }

  32. void serial_Output(u8 d)//模擬時(shí)序向74HC164串行輸出1字節(jié)數(shù)據(jù)
  33. {
  34.         u8 i;
  35.         for(i=0;i<8;i++)
  36.         {
  37.                 d <<= 1;
  38.                 DAT = CY; //移出一位,高位優(yōu)先
  39.                 CLK = 0;
  40.                 CLK = 1; //上升沿移入數(shù)據(jù)
  41.         }
  42. }

  43. void main()
  44. {
  45.         u8 i;
  46.         while(1)
  47.         {
  48.                 Decompose(val, Buf);    //分解顯示數(shù)據(jù)val
  49.                 Hide=0;//消隱,關(guān)閉數(shù)碼管電源
  50.                 for(i = 4; i != 0xff; i--) //串行發(fā)送各數(shù)字段碼
  51.                 {
  52.                         serial_Output(seg[Buf[i]]);
  53.                         //delayms(2);
  54.                 }
  55.                 Hide=1;//打開數(shù)碼管電源
  56.                 delayms(500);//延時(shí)u8最大255,改為u16
  57.                 val++;
  58.         }
  59. }
復(fù)制代碼


ID:245053 發(fā)表于 2019-3-1 10:08
視頻每秒24幀,也就是說(shuō)每秒刷新了24幅圖片人眼才不會(huì)感覺(jué)到畫面閃爍。動(dòng)態(tài)刷新數(shù)碼管一樣,也需在1秒內(nèi)刷新24遍,才會(huì)感覺(jué)不到閃爍,自己算:1/24秒內(nèi)要刷新完你的數(shù)碼管,每一個(gè)數(shù)碼管的時(shí)間多少。。。
ID:479009 發(fā)表于 2019-3-1 03:58
把164換成595吧,164每次移位都會(huì)輸出,前面7次輸出的值都不是你想要的
ID:246917 發(fā)表于 2019-3-1 01:18
delayms(500)時(shí)間太長(zhǎng)了,縮短到10ms左右再試試,多次刷新利用余輝

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

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

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