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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3632|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)程序測(cè)2k以上頻率數(shù)碼管老是循環(huán)閃爍?求分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
8黑幣
哪位大佬知道怎么解決嗎,測(cè)2k以上頻率數(shù)碼管老是循環(huán)閃爍


單片機(jī)代碼如下
  • #include <reg52.h >
  • #include <intrins.h >
  • #define uint unsigned int
  • #define uchar unsigned char
  • sbit  k1=P3^0;
  • sbit  k2=P2^0;
  • sbit  LED=P2^1;
  • unsigned  char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  • unsigned  char code dispcode[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  • unsigned  char count [8]={0, 0, 0, 0, 0, 0, 0, 0};
  • unsigned  int  T0count =0;
  • unsigned  char time1tick =0;
  • unsigned  char i =0,a=0,j=0,y=0;
  • unsigned  int x ;
  • void pulse_init (void)
  • {
  •   TMOD =0x16;
  •   TH0=0x00;
  •   TL0=0x00;
  •   TH1=(65536-50000)/256;
  •   TL1=(65536-50000)%256;
  •   ET0=1;
  •   ET1=1;
  •   EA=1;
  • }
  • void delay (uint ms)
  • {
  •   unsigned char i,j;
  •   for(i =0; i<ms; i ++)
  •   for(j =0; j<250;j ++)
  •   {
  •         _nop_();
  •         _nop_();
  •     _nop_();
  •    }
  • }
  • static void time0_int (void) interrupt 1 using 0
  • {
  •   T0count ++;
  • }
  • void t1(void) interrupt 3 using 0
  • {
  •   time1tick++;
  •   TH1=(65536-50000)/256;
  •   TL1=(65536-50000)%256;
  •   if (time1tick==10*a)
  •   {
  •     time1tick=0;
  •     TR0=0;
  •     TR1=0;
  •     ET0=0;
  •     ET1=0;
  •   }
  • }
  • void display (void)
  • {
  •   x=256*T0count+TL0;
  •   i=7;
  •   while(x)
  •   {
  •     count[ i]=x%10;
  •     x=x/10;
  •     i--;
  •   }
  •   while(i--)
  •   {
  •     count[ i]=10;//修改
  •   }
  •   for(i=0;i<8;i++)
  •   {
  •         if(i==7&&j==1)
  •         {
  •                 P1=0x80;
  •                 delay(1);
  •     }
  •            P0=dispbit;
  •            P1=dispcode[count[ i]];
  •            delay(1);
  •   }
  • }
  • void main()
  • {
  •   if(!k2)
  •   {
  •     delay(5);
  •         if(!k2)
  •         j=0;
  •         else
  •                 j=1;
  •   }
  •   switch(j)
  •   {
  •         case(0):a=2; LED=1; break;
  •         case(1):a=20; LED=0; break;
  •   }
  •   pulse_init();
  •   TR1=1;
  •   TR0=1;
  •   do
  •   {
  •     display();
  •   }while(k2);
  • }

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

使用道具 舉報(bào)

沙發(fā)
ID:390416 發(fā)表于 2021-5-1 00:48 | 只看該作者
回復(fù)

使用道具 舉報(bào)

板凳
ID:910050 發(fā)表于 2021-5-1 22:22 | 只看該作者
哪位大佬知道該改哪嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:275826 發(fā)表于 2021-5-2 08:54 | 只看該作者
我問(wèn)下樓主,程序時(shí)你自己寫(xiě)的還是參考的?
回復(fù)

使用道具 舉報(bào)

5#
ID:910050 發(fā)表于 2021-5-2 12:37 | 只看該作者
tyrl800 發(fā)表于 2021-5-2 08:54
我問(wèn)下樓主,程序時(shí)你自己寫(xiě)的還是參考的?

參考的
回復(fù)

使用道具 舉報(bào)

6#
ID:748096 發(fā)表于 2021-5-2 20:48 | 只看該作者
估計(jì)多次進(jìn)入中斷造成數(shù)碼管掃描跟不上。這種情況可以考慮SPI或I2C總線方式驅(qū)動(dòng)數(shù)碼管,這個(gè)不需要經(jīng)常掃描數(shù)碼管
回復(fù)

使用道具 舉報(bào)

7#
ID:275826 發(fā)表于 2021-5-2 21:59 | 只看該作者

程序結(jié)構(gòu)不能那樣寫(xiě)呀
回復(fù)

使用道具 舉報(bào)

8#
ID:889094 發(fā)表于 2021-5-2 22:12 | 只看該作者

101.  do
102.  {
103.    display();
104.  }while(k2);
這個(gè)地方,如果K2是0了,程序結(jié)束,顯示什么就過(guò) 了
回復(fù)

使用道具 舉報(bào)

9#
ID:889094 發(fā)表于 2021-5-2 22:13 | 只看該作者
82.void main()
83.{
84.
85.  if(!k2)
86.  {
87.    delay(5);
88.        if(!k2)
89.        j=0;
90.        else
91.                j=1;
92.  }
93.  switch(j)
94.  {
95.        case(0):a=2; LED=1; break;
96.        case(1):a=20; LED=0; break;
97.  }
這個(gè)地方程序開(kāi)始,一閃而過(guò),估計(jì)只能按鍵開(kāi)機(jī)才會(huì)檢測(cè)到
回復(fù)

使用道具 舉報(bào)

10#
ID:708541 發(fā)表于 2021-5-2 22:16 | 只看該作者
仿真是練不出技術(shù)的,多做一下實(shí)物吧。
回復(fù)

使用道具 舉報(bào)

11#
ID:889094 發(fā)表于 2021-5-2 22:32 | 只看該作者
70.  for(i=0;i<8;i++)
71.  {
72.        if(i==7&&j==1)
73.        {
74.                P1=0x80;
75.                delay(1);
76.    }
77.           P0=dispbit;
78.           P1=dispcode[count[ i]];
79.           delay(1);
80.  }

這個(gè)里面突然蹦出來(lái)的j是怎么個(gè)意思?delay里也在用,你在這里用它會(huì)是個(gè)什么值?
回復(fù)

使用道具 舉報(bào)

12#
ID:910050 發(fā)表于 2021-5-3 13:12 | 只看該作者
滄興電子 發(fā)表于 2021-5-2 20:48
估計(jì)多次進(jìn)入中斷造成數(shù)碼管掃描跟不上。這種情況可以考慮SPI或I2C總線方式驅(qū)動(dòng)數(shù)碼管,這個(gè)不需要經(jīng)常掃描 ...

多多包容,我是純小白開(kāi)始自學(xué),應(yīng)該怎么改代碼才能解決閃爍
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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