|
目前遇到一个问题,求组论坛大神:
要求:
前8个LED左右来回一次后,第九个LED翻转一下,同时数码管显示循环次数
已实现:
8个LED左右来回一次后,第九个LED翻转一下
问题:
数码管的显示循环次数,不能一直保持显示
【补充说明,我的目标是:当新的一轮LED循环时,数码管能一直保持上一次的数据
只有当新的一轮LED循环结束后 ,第九个LED翻转,数码管再更新数据】
如果,保持位选一直开着,则会在显示当前次数后,变成显示0;
如果,位选关闭,则会出现一闪一闪;
单片机源程序如下:- /*
- * File: Main.c
- * Author: 12618
- *
- * Created on 2022年9月30日, 上午9:53
- */
- /* Includes:主函数 ------------------------------------------------------------------*/
- #include <Main.h>
- /* Private define:个人定义变量 host变量 (字符常量)-------------------------------------------------------------*/
- /* Private variables:个人绑定变量----------------------------------------------------------*/
- /* Public variables:公共绑定变量-----------------------------------------------------------*/
- /* Private function prototypes:个人功能函数------------------------------------------------*/
- /*
- * @name main
- * @brief 主函数
- * @param None
- * @retval None
- */
- int main()
- {
-
- Sys.Sys_Init();
-
-
-
- //系统主循环
- while(1)
- {
- //Isr.Timer0_ISR();中断查询法
- SMG1.SumLed_SMG();
-
- }
-
-
-
- }
- /********************************************************
- End Of File
- ********************************************************/
- /*
- * File: SMG.c
- * Author: Administrator
- *
- * Created on 2022年9月20日, 下午4:27
- */
- #include <Main.h>
- /* Private define-------------------------------------------------------------*/
- u16_int ge;
- u16_int shi;
- u16_int bai;
- u16_int qian;
- const u8_word LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表
- /* Private variables----------------------------------------------------------*/
- static void SMG_SumLed(void); //适用输入输出端口初始化
- /* Public variables-----------------------------------------------------------*/
- //结构体定义对应.h的结构体类型
- SMG_t SMG1 =
- {
- 0, //定义数码管计数初值为0
- SMG_SumLed,
- };
- /* Private function prototypes------------------------------------------------*/
- /*
- * @name SMG_SumLed()
- * @brief 数码管函数
- * @param None
- * @retval None
- */
- ///// 查询法,需要放入while(1)//////
- static void SMG_SumLed()
- {
- Run_LED.LED_Flash();
- COUNT_LED = !COUNT_LED;
- SMG1.Flash_count = ++SMG1.Flash_count;
-
-
-
- ge = SMG1.Flash_count % 10;
- shi = SMG1.Flash_count % 100 / 10;
- bai = SMG1.Flash_count % 1000 / 100;
- qian = SMG1.Flash_count / 1000;
-
- u16_int i = 2;
-
- while( i--)
- {
- PORTBbits.RB3 = 0; //选择个位数码管
- PORTD = LED[ge]; //获取个位值
- Delay_timer.Delay_1us(5); //十延时
- //PORTD = 0xFF; //清数码管显示
- //PORTBbits.RB3 = 1; //关数码管
- PORTBbits.RB2 = 0; //选择十位数码管
- PORTD = LED[shi]; //获取十位值
- Delay_timer.Delay_1us(5); //延时
- // PORTD = 0xFF; //清数码管显示
- //PORTBbits.RB2 = 1; //关数码管*/
- PORTBbits.RB1 = 0; //选择百位数码管
- PORTD =LED[bai]; //获取百位值
- Delay_timer.Delay_1us(5); //延时
- // PORTD = 0xFF; //清数码管显示
- //PORTBbits.RB1 = 1; //关数码管
- PORTBbits.RB0 = 0; //选择千位数码管
- PORTD = LED[qian]; //获取千位值
- Delay_timer.Delay_1us(5); //延时
- //PORTD = 0xFF; //清数码管显示
- //PORTBbits.RB0 = 1; //关数码管
-
- }
-
- }
复制代码 |
|