#include <REG51.H>
#include <math.h> //Keil library
#include <stdio.h> //Keil library
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
sbit sck=P2^1;
sbit rck=P2^2;
sbit dio=P2^0;
sbit d1=P1^0;
typedef unsigned char BYTE;
typedef unsigned short WORD;
BYTE m;
static unsigned char second,minute,hour;
unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char disbuf[8]={0,0,0,0,0,0,0,0};
uchar ge,shi,bai,qian,wan; //显示变量
int dis_data; //变量
void conversion(uint temp_data);
//-----------------------------------
//*********************************************************
void conversion(uint temp_data) // 数据转换出 个,十,百,千,万
{
wan=temp_data/10000 ;
temp_data=temp_data%10000; //取余运算
qian=temp_data/1000 ;
temp_data=temp_data%1000; //取余运算
bai=temp_data/100 ;
temp_data=temp_data%100; //取余运算
shi=temp_data/10 ;
temp_data=temp_data%10; //取余运算
ge=temp_data;
}
//数据传输//
void sdataw(void)
{
unsigned char b,c,num;
//2.5sck 2.7 DIO 2.6 RCK
if(b==0)
{
b++;
num=segbit[m];
for(c=0;c<8;c++)
{sck=0;
dio=num&0x80;
num<<=1;
sck=1;
}
}
if(b==1)
{
b--;
{num=fseg[disbuf[m]];}
for(c=0;c<8;c++)
{ sck=0;
dio=num&0x80;
num<<=1;
sck=1;
}
}
m++;
if(m==8)
{m=0;
}
}
//数据传输//
//延时0.1ms个单位//
void delay (unsigned char h)
{ while(h--);
}
//延时0.1ms个单位//
//数据输出//
void out(void)
{rck=0;
delay(50);
rck=1;
}
//数据输出//
//*********************************************************
//主程序********
//*********************************************************
void main()
{
while(1) //循环
{
conversion(13356); //现在正常显示13356 ,想显示带点数的改哪里例如显示133.56
disbuf[4]=wan;
disbuf[3]=qian;
disbuf[2]=bai;
disbuf[1]=shi;
disbuf[0]=ge;
sdataw();
out();
}
}