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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何讓數碼管不關閉顯示?附單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:53813 發表于 2022-9-27 11:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
目前遇到一個問題,求組論壇大神:
要求:

前8個LED左右來回一次后,第九個LED翻轉一下,同時數碼管顯示循環次數
已實現:
8個LED左右來回一次后,第九個LED翻轉一下
問題:

數碼管的顯示循環次數,不能一直保持顯示
【補充說明,我的目標是:當新的一輪LED循環時,數碼管能一直保持上一次的數據
   只有當新的一輪LED循環結束后 ,第九個LED翻轉,數碼管再更新數據】


如果,保持位選一直開著,則會在顯示當前次數后,變成顯示0;
如果,位選關閉,則會出現一閃一閃;

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

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


  10. /* Private variables:個人綁定變量----------------------------------------------------------*/


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


  12. /* Private function prototypes:個人功能函數------------------------------------------------*/


  13. /*
  14.     * @name   main
  15.     * @brief  主函數
  16.     * @param  None   
  17.     * @retval None      
  18. */
  19. int main()
  20. {
  21.    
  22.     Sys.Sys_Init();
  23.    
  24.    
  25.    
  26.     //系統主循環
  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. //結構體定義對應.h的結構體類型
  57. SMG_t    SMG1 =
  58. {
  59.     0,                        //定義數碼管計數初值為0
  60.     SMG_SumLed,
  61. };

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

  63. /*
  64.     * @name  SMG_SumLed()
  65.     * @brief  數碼管函數
  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;                              //選擇個位數碼管
  88.           PORTD = LED[ge];                            //獲取個位值
  89.           Delay_timer.Delay_1us(5);                       //十延時
  90.           //PORTD = 0xFF;                                   //清數碼管顯示
  91.           //PORTBbits.RB3 = 1;                              //關數碼管

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


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

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

Desktop.zip

1.12 MB, 下載次數: 6

兩種現象

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

使用道具 舉報

沙發
ID:446095 發表于 2022-9-27 14:30 | 只看該作者
這個問題一般是延時函數造成的
回復

使用道具 舉報

板凳
ID:446095 發表于 2022-9-27 14:35 | 只看該作者
檢查延時函數
回復

使用道具 舉報

地板
ID:384109 發表于 2022-9-27 14:58 | 只看該作者
如果是掃描方式驅動數碼管的話是要關閉數碼管的,while(i--)多余了
回復

使用道具 舉報

5#
ID:53813 發表于 2022-9-27 15:28 | 只看該作者
人中狼 發表于 2022-9-27 14:58
如果是掃描方式驅動數碼管的話是要關閉數碼管的,while(i--)多余了

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

回復

使用道具 舉報

6#
ID:123289 發表于 2022-9-28 09:59 | 只看該作者
太簡單的問題了:
在你提出的時間節點上,多做幾個標記,不就可以了。
回復

使用道具 舉報

7#
ID:195496 發表于 2022-9-28 10:49 | 只看該作者
小兒科的事情,調試一下就可以搞定
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲在线免费 | 久久精品视频网站 | 欧美日韩高清一区 | 国产一级电影网 | 亚洲一区| 日本精品一区二区三区视频 | 亚洲精品乱码久久久久久蜜桃 | 51ⅴ精品国产91久久久久久 | 久久精品国产久精国产 | 国产99久久| 国产精品久久久久久一区二区三区 | 日韩av一二三区 | 在线日韩欧美 | 亚洲欧美视频一区 | 91精品国产一区二区三区蜜臀 | 一区二区三区电影网 | 狠狠干狠狠插 | 国产伊人久久久 | 中文字幕在线看人 | 亚洲最大av网站 | a在线观看| 久久久久久久国产 | 国产成人综合网 | 国产成人免费 | 日韩1区| 一级做a爰片性色毛片视频停止 | 国产精品亚洲成在人线 | 久久狠狠 | 国产成人99久久亚洲综合精品 | 国产福利91精品一区二区三区 | www.成人在线视频 | 国产乱码精品一区二区三区忘忧草 | 91久久婷婷| 性生生活大片免费看视频 | 亚洲综合在线网 | 国产在线a| 天天草天天 | 久久国产精品久久久久久 | 中文在线一区 | 国产精品区二区三区日本 | 国产成人91视频 |