钻石会员
主题
帖子
积分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;
}
} |
|