找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1783|回复: 0
打印 上一主题 下一主题
收起左侧

数码管的动态显示,单片机中断,按键,外部脉冲

[复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit S1=P2^0;
sbit S2=P2^1;
sbit S3=P2^2;        
sbit S4=P2^3;                                    //位定义P2.3口
sbit S5=P2^4;                                    // 位定义P2.4口
sbit S6=P2^5;                                    //位P2.5口
sbit Key1=P3^7;                                     //定义P3.7口为按键口

uchar code duan_N[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};            //共阴极数码管故低高电平导通,显示断码,不带小数点

uchar Key1Times=0;                                     //定义按键被按下次数
uint M=0;                                        //定义计时次数
                                          
void delay(uint);                   //定义延时函数
void display(uint miao);                        //定义显示函数
void main()                  
{         //设置INT1s
   IT1=1;  //跳沿触发方式,负跳变
         EX1=0;   //关闭INT1中断容许,EX为外部中断1允许位 ,1—允许外部中断1中断,0-禁止外部中断1中断ss
        EA=1;     //打开总中断, S
         while(1)
         {
           
           if(Key1==0)                         //当有按键被按下时
           {
                     delay(10);                //去抖
                  while(Key1==0);          //再次检查按键是否被按下
                           Key1Times++;           //记录按键次数+1                                   
           }
           
                if(Key1Times==1){EX1=1;}          //按键第一次按下,允许中断。
                if(Key1Times==2){EX1=0;}         //按键第二次按下,禁止中断
                if(Key1Times==3){Key1Times=0;M=0;}                   //第三次按下,均清零
                          
           display(M);                         //调用自定义display函数,使数码管显示数字
         }
}
void delay(uint xms)                        //延时函数
{        
        int i,j;
        for(i=xms;i>0;i--)
                for(j=120;j>0;j--);    //这里用了for语句的嵌套,用来增加延时时间
}

void display(uint miao)                 //定义一个显示函数                 
{
    uchar baimiao,shimiao,yimiao;


        baimiao=miao/100;                           //定义数码管百位
        shimiao=miao/10%10;                          //十位
        yimiao=miao%10;                            //个位
        S1=0;                                          
                P0=0x66;                  
                delay(1);                                   
                S1=1;                                                
               
    S2=0;                                                
    P0=0x4F;                          
    delay(1);                                   
    S2=1;                                                        
        
                S3=0;                                                               
                P0=0x5B;                                          
                delay(1);                                                  
                S3=1;                                                           
                        

                S4=0;                                          //选择第四位数码管
                P0=duan_N[baimiao];                   //调用数组选择百位的数
                delay(1);                                   //延时
                S4=1;                                                 //释放第四位数码管
               
    S5=0;                                                        //选择第五位数码管
    P0=duan_N[shimiao];                          //调用数组选择十位的数
    delay(1);                                            //延时
    S5=1;                                                         //释放第五位数码管
        
                S6=0;                                                                  //选择第六位数码管
                P0=duan_N[yimiao];                                          //调用数组选择个位的数
                delay(1);                                                           //延时
                S6=1;                                                            //释放第六位数码管
}
void Int1()interrupt 2                             //定义中断函数,中断源为外部中断1 ,将中断函数定义为void,以明确说明其没有返回值
{
            M++;
                if(M==1000)                        
                {
              M=999;                  
           }
               
}                                        //结束返回主函数 while(1)循环


批注 2020-04-19 162935.png (78.53 KB, 下载次数: 63)

硬件电路图

硬件电路图

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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