360软件小助手截图20130520140706.jpg (393.7 KB, 下载次数: 1)
下载附件
原理图
2013-5-20 14:09 上传
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit shcp1=P2^0; //上升沿输入
sbit ds1=P2^1; //输入数据
sbit stcp1=P2^2; //上升沿输出
sbit shcp2=P2^3;
sbit ds2=P2^4;
sbit stcp2=P2^5;
char temp1,temp2,temp3;
char num=100,n=0;
uchar code duan[]=
{0xc0,0xf9,0xa4,0xb0,0x99, /* 0到9 */
0x92,0x82,0xf8,0x80,0x90};
/*简单延时*/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
/*595第一个锁存器*/
/*段选数据输入 */
void input1(char temp)
{
uchar i;
for(i=0;i<8;i++) /*只是表明向左移动 移动过几次*/
{
temp<<=1;
ds1=CY;
shcp1=0;
shcp1=1;
}
}
/*段选数据输出*/
void output1()
{
stcp1=0;
stcp1=1;
}
/*595第二个锁存器*/
/*位选选数据输入 */
void input2(char temp)
{
uchar i;
for(i=0;i<8;i++) /*只是表明向左移动 移动过次*/
{
temp<<=1;
ds2=CY;
shcp2=0;
shcp2=1;
}
}
/*位选数据输出*/
void output2()
{
stcp2=0;
stcp2=1;
}
/*主函数*/
void main(void)
{
char i,j,k;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
/*个位*/
temp2=0x04; //595的位选输入
input2(temp2); //输入
output2();
i=num%10;
temp1=duan
;
input1(temp1);//595的段选输入
output1(); //输出
delay(5);
/*十位*/
temp2=0x02; //
input2(temp2); // 595的位选输入
output2(); // 输出
j=num/10%10;
temp1=duan[j]; //
input1(temp1); // 595的段选输入
output1(); // 输出
delay(5);
/*百位*/
temp3=0x01; //
input2(temp3); // 595的位选输入
output2(); // 输出
k=num/100;
temp1=duan[k]; //
input1(temp1); // 595的段选输入
output1(); // 输出
delay(5);
if(n==20)
{
n=0;
num++;
if(num==121)
{
num=100;
}
}
}
}
/*中断*/
void T0_time()interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
n++;
}
一周热门 更多>