基于51单片机的74HC164驱动六位数码管动态显示程序

基于51单片机的74HC164驱动六位数码管动态显示程序

有需要资料的请回原文下载

#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int
//74HC164
sbit CLK=P1^0;        // μíμ&ccedil;&AElig;&frac12;μ&frac12;&cedil;&szlig;μ&ccedil;&AElig;&frac12;±&szlig;&Ntilde;&Oslash;′¥·¢
sbit MOSI=P1^1;         //         êy&frac34;Yê&auml;è&euml;

unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //12ò&otilde;êy&Acirc;&euml;1ü
unsigned char DS_data[6];
/*****************************************************
oˉêy1|&Auml;ü:êy&Acirc;&euml;1üé¨&Atilde;è&Ntilde;óê±×óoˉêy
oˉêy1|&Auml;ü:&Ntilde;óê±1ms

***************************************************/
void delay1ms()
{
   unsigned char i,j;        
         for(i=0;i<10;i++)
          for(j=0;j<33;j++)
           ;                 
}
void separateData(unsigned long dat)         // dat&Icirc;a6&Icirc;&raquo;êy
{
   DS_data[0]=dat%10;
   DS_data[1]=dat/10%10;
   DS_data[2]=dat/100%10;
   DS_data[3]=dat/1000%10;
   DS_data[4]=dat/10000%10;
   DS_data[5]=dat/100000%10;
}
void write_164(unsigned char dat)
{
   unsigned char i;
   for(i=0;i<8;i++)
   {
     CLK=0;            
     if(dat&0x80)  MOSI=1;
     else          MOSI=0;
     CLK=1;               
     dat<<=1;
  }
}

void display()
{
   unsigned char i;
   for(i=0;i<6;i++)
   {
                        write_164(Tab[DS_data
]);
                        P2=0x3f&(~(0x01<<i));     //êy&Acirc;&euml;1ü&Icirc;&raquo; 12ò&otilde;μíμ&ccedil;&AElig;&frac12;&Ntilde;&iexcl;&Ouml;Dseg1&para;&Ocirc;ó|P2.5 seg6&para;&Ocirc;ó|P2.0
                        delay1ms();
                        P2=0xff;        //êy&Acirc;&euml;1ü&Atilde;e
   }

}

main()
{
   separateData(654321);
   while(1)
   {
     display();
   }
}




#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int
//74HC164
sbit CLK=P1^0;        // 低电平到高电平边沿触发
sbit MOSI=P1^1;         //         数据输入

unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //共阴数码管
unsigned char DS_data[6];
/*****************************************************
函数功能:数码管扫描延时子函数
函数功能:延时1ms

***************************************************/
void delay1ms()
{
   unsigned char i,j;        
         for(i=0;i<10;i++)
          for(j=0;j<33;j++)
           ;                 
}
void separateData(unsigned long dat)         // dat为6位数
{
   DS_data[0]=dat%10;
   DS_data[1]=dat/10%10;
   DS_data[2]=dat/100%10;
   DS_data[3]=dat/1000%10;
   DS_data[4]=dat/10000%10;
   DS_data[5]=dat/100000%10;
}
void write_164(unsigned char dat)
{
   unsigned char i;
   for(i=0;i<8;i++)
   {
     CLK=0;            
     if(dat&0x80)  MOSI=1;
     else          MOSI=0;
     CLK=1;               
     dat<<=1;
  }
}

void display()
{
   unsigned char i;
   for(i=0;i<6;i++)
   {
                        write_164(Tab[DS_data]);
                        P2=0x3f&(~(0x01<<i));     //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0
                        delay1ms();
                        P2=0xff;        //数码管灭
   }

}

main()
{
   separateData(654321);
   while(1)
   {
     display();
   }
}

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值