|
程序如下:
#include <reg51.h> //51芯片管脚定义头文件
#include <intrins.h> //内部包含延时函数
#define uchar unsigned char
#define uint unsigned int
uchar code dat[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
sbit SER=P2^0 ; //串行数据输入
sbit S_CLK=P2^1 ; //移位时钟脉冲
sbit R_CLK=P2^2 ; //输出锁存器控制脉冲
//**********************************************
//-----delay code (k=1,delay==1ms)---------
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<121;j++)
{;}}
}
void Ini_595() //初始化,两个595输出0
{
uchar i,j;
S_CLK=0;
R_CLK=0;
for (i=4;i>=1;i--)
{
for(j=0;j<8;j++)
{
SER=0;
S_CLK=0;
delay(15);
S_CLK=1;
}
}
R_CLK=0;
delay(15);
R_CLK=1;
}
/******从SER口发送数据,**********************************/
void sendbyte(uchar temp)
{ uchar j;
for(j=0;j<8;j++)
{
S_CLK=0;
_nop_() ;
_nop_() ;
SER=temp&0x80;
temp<<=1;
S_CLK=1;
}
}
/*****************移位后上升沿锁存***********************/
void out_595()
{
R_CLK=0;
_nop_() ;
_nop_() ;
R_CLK=1;
}
main()
{
uint s1=0x0324;
Ini_595();
delay(5);
while(1)
{
sendbyte(dat[s1/1000]);
_nop_() ;
sendbyte(dat[s1/100]);
_nop_() ;
sendbyte(dat[s1/10]);
_nop_() ;
sendbyte(dat[s1%10]);
out_595();
delay(1000);
while(1);
}
}
//******************************************************
程序和仿真见附件
|
|