找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1886|回復(fù): 6
收起左側(cè)

如何讓數(shù)碼管不關(guān)閉顯示?附單片機(jī)程序

[復(fù)制鏈接]
ID:53813 發(fā)表于 2022-9-27 11:12 | 顯示全部樓層 |閱讀模式
目前遇到一個(gè)問題,求組論壇大神:
要求:

前8個(gè)LED左右來回一次后,第九個(gè)LED翻轉(zhuǎn)一下,同時(shí)數(shù)碼管顯示循環(huán)次數(shù)
已實(shí)現(xiàn):
8個(gè)LED左右來回一次后,第九個(gè)LED翻轉(zhuǎn)一下
問題:

數(shù)碼管的顯示循環(huán)次數(shù),不能一直保持顯示
【補(bǔ)充說明,我的目標(biāo)是:當(dāng)新的一輪LED循環(huán)時(shí),數(shù)碼管能一直保持上一次的數(shù)據(jù)
   只有當(dāng)新的一輪LED循環(huán)結(jié)束后 ,第九個(gè)LED翻轉(zhuǎn),數(shù)碼管再更新數(shù)據(jù)】


如果,保持位選一直開著,則會(huì)在顯示當(dāng)前次數(shù)后,變成顯示0;
如果,位選關(guān)閉,則會(huì)出現(xiàn)一閃一閃;

單片機(jī)源程序如下:
  1. /*
  2. * File:   Main.c
  3. * Author: 12618
  4. *
  5. * Created on 2022年9月30日, 上午9:53
  6. */
  7. /* Includes:主函數(shù) ------------------------------------------------------------------*/
  8. #include <Main.h>

  9. /* Private define:個(gè)人定義變量 host變量 (字符常量)-------------------------------------------------------------*/


  10. /* Private variables:個(gè)人綁定變量----------------------------------------------------------*/


  11. /* Public variables:公共綁定變量-----------------------------------------------------------*/


  12. /* Private function prototypes:個(gè)人功能函數(shù)------------------------------------------------*/


  13. /*
  14.     * @name   main
  15.     * @brief  主函數(shù)
  16.     * @param  None   
  17.     * @retval None      
  18. */
  19. int main()
  20. {
  21.    
  22.     Sys.Sys_Init();
  23.    
  24.    
  25.    
  26.     //系統(tǒng)主循環(huán)
  27.     while(1)
  28.     {
  29.         //Isr.Timer0_ISR();中斷查詢法
  30.         SMG1.SumLed_SMG();
  31.          
  32.     }
  33.    
  34.             
  35.    
  36. }



  37. /********************************************************
  38.   End Of File
  39. ********************************************************/




  40. /*
  41. * File:   SMG.c
  42. * Author: Administrator
  43. *
  44. * Created on 2022年9月20日, 下午4:27
  45. */


  46. #include <Main.h>

  47. /* Private define-------------------------------------------------------------*/

  48. u16_int ge;
  49. u16_int shi;
  50. u16_int bai;
  51. u16_int qian;

  52. const u8_word LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //段碼表

  53. /* Private variables----------------------------------------------------------*/
  54. static   void SMG_SumLed(void);                   //適用輸入輸出端口初始化


  55. /* Public variables-----------------------------------------------------------*/
  56. //結(jié)構(gòu)體定義對應(yīng).h的結(jié)構(gòu)體類型
  57. SMG_t    SMG1 =
  58. {
  59.     0,                        //定義數(shù)碼管計(jì)數(shù)初值為0
  60.     SMG_SumLed,
  61. };

  62. /* Private function prototypes------------------------------------------------*/  

  63. /*
  64.     * @name  SMG_SumLed()
  65.     * @brief  數(shù)碼管函數(shù)
  66.     * @param  None
  67.     * @retval None      
  68. */
  69. ///// 查詢法,需要放入while(1)//////
  70.   static  void SMG_SumLed()
  71. {     
  72.      Run_LED.LED_Flash();
  73.      COUNT_LED = !COUNT_LED;
  74.      SMG1.Flash_count = ++SMG1.Flash_count;
  75.       
  76.    
  77.      
  78.     ge   =  SMG1.Flash_count % 10;
  79.     shi  =  SMG1.Flash_count % 100 / 10;
  80.     bai  =  SMG1.Flash_count % 1000 / 100;
  81.     qian =  SMG1.Flash_count / 1000;
  82.    
  83.      u16_int i = 2;
  84.    
  85.     while( i--)
  86.     {
  87.           PORTBbits.RB3 = 0;                              //選擇個(gè)位數(shù)碼管
  88.           PORTD = LED[ge];                            //獲取個(gè)位值
  89.           Delay_timer.Delay_1us(5);                       //十延時(shí)
  90.           //PORTD = 0xFF;                                   //清數(shù)碼管顯示
  91.           //PORTBbits.RB3 = 1;                              //關(guān)數(shù)碼管

  92.           PORTBbits.RB2 = 0;                              //選擇十位數(shù)碼管
  93.           PORTD = LED[shi];                         //獲取十位值
  94.          Delay_timer.Delay_1us(5);                       //延時(shí)
  95.          // PORTD = 0xFF;                                   //清數(shù)碼管顯示
  96.           //PORTBbits.RB2 = 1;                              //關(guān)數(shù)碼管*/


  97.           PORTBbits.RB1 = 0;                              //選擇百位數(shù)碼管
  98.           PORTD =LED[bai];                         //獲取百位值
  99.           Delay_timer.Delay_1us(5);                       //延時(shí)
  100.          // PORTD = 0xFF;                                   //清數(shù)碼管顯示
  101.           //PORTBbits.RB1 = 1;                              //關(guān)數(shù)碼管

  102.           PORTBbits.RB0 = 0;                              //選擇千位數(shù)碼管
  103.           PORTD = LED[qian];                          //獲取千位值
  104.           Delay_timer.Delay_1us(5);                      //延時(shí)
  105.           //PORTD = 0xFF;                                   //清數(shù)碼管顯示
  106.           //PORTBbits.RB0 = 1;                              //關(guān)數(shù)碼管
  107.    
  108.      }   
  109.                            
  110. }
復(fù)制代碼

Desktop.zip

1.12 MB, 下載次數(shù): 6

兩種現(xiàn)象

回復(fù)

使用道具 舉報(bào)

ID:446095 發(fā)表于 2022-9-27 14:30 | 顯示全部樓層
這個(gè)問題一般是延時(shí)函數(shù)造成的
回復(fù)

使用道具 舉報(bào)

ID:446095 發(fā)表于 2022-9-27 14:35 | 顯示全部樓層
檢查延時(shí)函數(shù)
回復(fù)

使用道具 舉報(bào)

ID:384109 發(fā)表于 2022-9-27 14:58 | 顯示全部樓層
如果是掃描方式驅(qū)動(dòng)數(shù)碼管的話是要關(guān)閉數(shù)碼管的,while(i--)多余了
回復(fù)

使用道具 舉報(bào)

ID:53813 發(fā)表于 2022-9-27 15:28 | 顯示全部樓層
人中狼 發(fā)表于 2022-9-27 14:58
如果是掃描方式驅(qū)動(dòng)數(shù)碼管的話是要關(guān)閉數(shù)碼管的,while(i--)多余了

如果不while(--)的話,
這個(gè)Delay_timer.Delay_1us( );   不增加就會(huì)一閃而過
如果這個(gè)Delay_timer.Delay_1us( ); 增加,數(shù)碼管就會(huì)明顯趨于流水從右到左一閃而過

回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2022-9-28 09:59 | 顯示全部樓層
太簡單的問題了:
在你提出的時(shí)間節(jié)點(diǎn)上,多做幾個(gè)標(biāo)記,不就可以了。
回復(fù)

使用道具 舉報(bào)

ID:195496 發(fā)表于 2022-9-28 10:49 | 顯示全部樓層
小兒科的事情,調(diào)試一下就可以搞定
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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