找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3|回复: 0
收起左侧

51单片机驱动双74hc595数码管程序

[复制链接]
ID:734967 发表于 2025-9-3 06:07 | 显示全部楼层 |阅读模式
                                                                  

#include "reg51.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;
u8 ledNum;
u8 led,s,f,m,aa,xf,xfg,xm,xmg,xs,xsg,b;   //
//--定义使用的IO口--//
sbit SRCLK=P3^4;
sbit SR=P1^2;

  
sbit RCLK=P1^3;  //     st
sbit SER=P3^5;

sbit jf=P3^7;//加分
sbit js=P3^6;//加时
void delay(u8 z)//子程序
{
     u8 x,y;
                for(x=100;x>0;x--)
                 for(y=z;y>0;y--);
}
u8 ziz[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //显示数组
u8 zi []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //
void Hc595SendByte(u8 dat)
{
        u8 a;
                   // 发送8位数  sbit SRCLK=P3^1;
        SRCLK = 1;
        RCLK = 1;     //sbit RCLsK=P3^3;      st

        for(a=0;a<8;a++)                 //      

        {
                SER = dat >> 7;                 //从最高位开始发送
                dat <<= 1;

                SRCLK = 0;                         //发送时序
                _nop_();
                _nop_();
                SRCLK = 1;        
        }
        RCLK = 0;
        _nop_();
        _nop_();
        RCLK = 1;
}
void Hc(u8 dat)
{
        u8 a;
                   // 发送8位数  sbit SRCLK=P3^1;
        SR  = 1;
        RCLK = 1;     //sbit RCLsK=P3^3;      st

        for(a=0;a<8;a++)                 //      

        {
                SER = dat >> 7;                 //从最高位开始发送
                dat <<= 1;

                SR  = 0;                         //发送时序
                _nop_();
                _nop_();
                SR  = 1;        
        }
        RCLK = 0;
        _nop_();
        _nop_();
        RCLK = 1;
}void main()
{        
TMOD =0x01;
TH0=(65536-5000)/250;
TL0=(65536-5000)%250;
EA=1;
ET0=1;
TR0=1;   
        //        ledNum = 0x00;//全部显示几位数码管{0Xfe,0Xfd,0Xfb, 0Xef ,0Xdf,0Xbf};           
           // led  = 0x3f;//显 {0x3f,0x03,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  
        while(1)

        {  
   
     if(jf==0)  //判断是否按下键盘
            {  delay(200);
           if(jf==0)
           {f++;}
           while (!jf);
                 }
        if(js==0)  //判断是否按下键盘
            { delay(200);
           if(js==0)
           {s++;}
           while (!js);
                 }

        

       Hc595SendByte(0xfe);   
       Hc(zi [xsg]);
               delay(10);
       Hc595SendByte(0xfd);   
       Hc(ziz [xs]);
               delay(10);


        Hc595SendByte(0xef);  //        (0xfb);
       Hc(zi [xfg]);
               delay(10);
       Hc595SendByte(0xdf); //          (0xef);
       Hc(ziz [xf]);
               delay(100);


        Hc595SendByte(0xfb);  //       (0xdf);
       Hc(zi [xmg]);
               delay(10);
       Hc595SendByte(0xbf);    //   (0xbf);
       Hc(zi [xm]);
               delay(10);

       Hc595SendByte(0x00);   
       Hc(0x00);
               delay(10);

        
        xf=f%10;
         xfg=f/10;
         xs=s%10;
         xsg=s/10;
          xm=m%10;
         xmg=m/10;
        //led = _crol_(led, 1);
        
    //        ledNum = _crol_(ledNum, 1);
        
        }               
}

void  timer0()interrupt 1
{
  TH0=(65536-5000)/250;
  TL0=(65536-5000)%250;
        aa++;
           if(aa==20)  //
        {m++;
     if(m==60)  //
        {m=0;f++;
     if(f==60)  //
        {f=0;s++;
      if(s>=24)  
        {s=0;}}}
    }

         
     }

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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