找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机数码时钟调节时分秒的时候怎么让调节位闪烁?求大佬指点

查看数: 3943 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-7-4 10:58

正文摘要:

#include<reg51.h> sbit key_1=P1^0        ;  //秒、分、时间的切换键 sbit key_2=P1^1        ;  //加1 sbit key_3=P1^ ...

回复

ID:105364 发表于 2019-7-7 12:04

ID:105364 发表于 2019-7-6 22:08
P0=table1[sec/10];                   //显示秒十位数
                                                if( count1==1&&flag_flash==1)
                                                        P2=0x00;
                                                else

                           
                        P2=table2[6];                        
                        delay_5ms();            
                        P0=0xff;

                                                P0=table1[sec%10];                  //显示秒个位数      
                        if( count1==1&&flag_flash==1)
                                                        P2=0x00;
                                                else  
                        

                        P2=table2[7];                        
                        delay_5ms();         
                        P0=0xff;
ID:105364 发表于 2019-7-6 22:07
一、设个闪烁的标志,开定时中断T1,0.5秒求反一次。
void  T1_500ms(void) interrupt 3               
{
    static unsigned char count2 = 0;
    TR1 = 0;
    TH1 = (65536 - 50000 ) / 256;         //设置T1初始值为:15536
    TL1 = (65536 - 50000 ) % 256;         //记数为50000次//50000*1us=50ms
    TR1 = 1;
    count2++;
    if(count2 == 10)                 
    {
                count2 = 0;
                flag_flash=!flag_flash;// 调整时的闪烁标志
        }
}

二、显示函数里根据调秒和闪烁标志,控制显示和熄灭(这里仅以秒的闪烁为例)
P0=table1[sec/10];                   //显示秒十位数
if( count1==1&&flag_flash==1)
P2=0x00;
else
                           
                        P2=table2[6];                        
                        delay_5ms();            
                        P0=0xff;

                                                P0=table1[sec%10];                  //显示秒个位数      
                        if( count1==1&&flag_flash==1)
                                                        P2=0x00;
                                                else  
                        
                        P2=table2[7];                        
                        delay_5ms();         
                        P0=0xff;
ID:105364 发表于 2019-7-6 14:25
hhh402 发表于 2019-7-6 00:50
你的程序直接用学习板的程序是不行的,单片机学习板的程序只是为了说明单片机原理,真正的程序要多用中断, ...

“你这个程序只要一按按键数码管显示就混乱。因为你的按键程序有待按键释放,按键后就不运行数码管显示程序了。”


while(key_1==0)                 disp_led(); //等待按键释放,并且调用显示程序
没问题
ID:491577 发表于 2019-7-6 00:50
你的程序直接用学习板的程序是不行的,单片机学习板的程序只是为了说明单片机原理,真正的程序要多用中断,少用延时,这种语句 while(key_2==0)基本不用。实际按键程序不需要按键消抖,不需要等,实际按键程序需要放在约10-20ms中断中执行,数码管显示程序也是放在中断中执行的。你这个程序只要一按按键数码管显示就混乱。因为你的按键程序有待按键释放,按键后就不运行数码管显示程序了。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表