钻石会员 
 
主题
回帖0
积分13782
阅读权限50
注册时间2010-5-7
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
 楼主 |
发表于 2012-7-6 13:46
|
显示全部楼层
 
 
 
回复 8# 社建电子  
 
 
    重新改了下,用3个IO, 
 
仿真图片如下: 
 
 
 
 
程序代码如下: 
 
 
74HC595驱动数码管.rar
(80.46 KB, 下载次数: 1121)
 
 
#include<reg52.h> 
#define uchar unsigned char 
#define uint unsigned int 
sbit SRCK=P3^0;   //上升沿时数据寄存器移位 
sbit RCK=P3^1;   //上升沿时数据进入数据存储寄存器,锁定输出,下降沿时不变 
sbit SI=P3^3;   //75HC595串行输入线 
sbit P3_7=P3^7;   //定义位选择数据线 
 
uint t,shu; 
uchar c,a; 
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管编码 
//uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //流水灯编码 
//uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管编码 
     
uchar code weixuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; 
 
uchar wei[]={0,0,0,0,0,0}; 
/******************************************************/ 
void delay(uint z) 
{ 
 uint y,x; 
 for(y=z;y>0;y--) 
 for(x=110;x>0;x--); 
} 
/******************************************************/ 
void delay_us(uint z) 
{ 
 uint y,x; 
 for(y=z;y>0;y--) 
 for(x=1;x>0;x--); 
} 
/******************************************************** 
说明:74HC595串行数据写入子函数 
/*******************************************************/ 
void write_595(uchar temp) 
{ 
 uchar i; 
 for(i=8;i>0;i--) 
 { 
  SRCK=0; 
  SI=temp&0x01; 
  SRCK=1; 
  temp>>=1; 
 } 
} 
 
/******************************************************/ 
void init() 
{ 
    TMOD=0x02;                //定时器0,16位工作方式 
 TH0=0x06;     //赋初值 
 TL0=0x06;             
 TR0=1;                   //启动定时器0 
 ET0=1;                    //打开定时器0中断 
 EA=1;                     //打开总中断 
} 
 
/*****************************************************/ 
void main() 
{ 
 uchar i; 
 init(); 
 while(1) 
 { 
  for(i=0;i<4;i++) 
  { 
   write_595(weixuan);  
   write_595(table[wei]); //写入显示数据 
   RCK=1; 
   RCK=0; 
   delay(10); 
  } 
 } 
} 
 
timer0() interrupt 1      //定时器0中断服务程序  
{    
 t++;  
  
  if(t==1000) 
  { 
   t=0;    //清零 
   shu++; 
   if(shu==5000) 
   shu=0; 
 
  
   wei[0]=shu%10; 
   wei[1]=shu%100/10; 
   wei[2]=shu%1000/100; 
   wei[3]=shu%10000/1000; 
  } 
} |   
 
 
 
 |