kinggate的单片机小屋 https://bbs.21ic.com/?456626 [收藏] [复制] [RSS] 本站主要收集单片机、嵌入式、电子的资料,并希望能结交一些喜欢单片机的朋友 我有很多资料的,但因为忙,都没有时间放上去,敬请关注~~~~

日志

74HC595 数码管显示程序

已有 8248 次阅读2007-4-29 11:12 |系统分类:单片机| 74HC595, 数码管显示, 动态显示

/*---------------------------------------------------------------------------------------------------------------

一个595驱动 2个共阳极数码管

 

MM74HC595 +数码管显示的程序模块,标号按MM74HC595.PDF文件标注
提供show(showdata)显示接口  showdata:0~99

--------------------------------------------------------------------------------------------------------------*/

电路图如下:(看不清的可右键点击保存再看)

 

 

 

#include<reg51.h> 
#define uchar unsigned char

uchar code seg[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit SER=P0^4;   //595串行数据输入
sbit SCK=P0^5;   //595移位时钟
sbit RCK=P0^7;   //595数据输出脉冲
sbit SQH=P0^6;   //595串行数据输出
sbit gewei=P2^7;  //595数码管个位选通
sbit shiwei=P2^6; //595数码管十位选通


sbit power=P1^7;  //

void IN595(uchar segdata) //输入一字节数码管数据进595
{
  uchar i,temp;
  temp=seg[segdata];
  RCK=0; 
  for(i=0;i<8;i++) //循环移入8位数据,
  {
     SCK=0;
    SER=temp&0x80; // 取数码的最高位
  temp=temp<<1;
  SCK=1; //上升沿把一位数据移入595
  }
  //由于电路不是我设计的,有点不合理,这时在最低位QA的对应的是数码管右下角的点的管脚,所以需要再移一位,以使数码管右下角的点能正确显示
  //
  SCK=0;
  SER=seg[segdata]&0x80;
  SCK=1;


  RCK=1;  //上升沿把8位数据并行输出
}


void show(uchar showdata) 
{
   uchar i,j;
   i=showdata/10;
   j=showdata%10;
   IN595(i);    //移入十位数据
   gewei=1;     //关个位
   shiwei=0;    //选通十位数码管
  //delay();   //不用加延时了,因为显示数据串入595已经要一段的时间了
   IN595(j);    //移入个位数据
   shiwei=1;    //关十位 
   gewei=0;     //选通个位数码管 

}


void main()  //测试。。。。。。。。。。。。。。。。
{
  power=1;    //
  while(1)
  { 
  show(58);
  }
}

 

 

 


 






路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (2 个评论)

回复 cokefloat 2009-5-7 13:01
厉害,可惜看不懂
回复 foxtome 2009-5-30 04:04
好哦 呵呵 最近我在做一个简单电路 呵呵 学了