高级会员
主题
回帖0
积分158
阅读权限30
注册时间2017-7-6
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2017-7-20 11:12
|
显示全部楼层
void SerialPut(unsigned char dat, u8 Px)
{
u16 m;
switch(Px)
{
case 1: //第一大行
{
for(m=0;m<8;m++)
{
if(dat & 0x80) R1=1; //串行数据输入
else R1=0;
CLK=0;
CLK=1;
delay_us(1);
CLK=0;
dat=dat<<1; //数据左移
}
}
break;
case 2: //第二大行
{
for(m=0;m<8;m++)
{
if(dat & 0x80) R2=1; //串行数据输入
else R2=0;
CLK=0;
CLK=1;
delay_us(1);
CLK=0;
dat=dat<<1; //数据左移
}
}
break;
case 3: //第三大行
{
for(m=0;m<8;m++)
{
if(dat & 0x80) R3=1; //串行数据输入
else R3=0;
CLK=0;
CLK=1;
delay_us(1);
CLK=0;
dat=dat<<1; //数据左移
}
}
break;
default:
break;
}
}
//行显控制
//入口参数:扫描行数
//入口参数0/1/2/3 代表行扫描13,9,5,1/14,10,6,2/15,11,7,3/16,12,8,4的1/4行
void Scan(u8 temp)
{
EN=0; //关闭显示
STB=1; //更新595输出
ALine=0x01 & temp;
BLine=0x01 &(temp>>1);
STB=0;
EN=1; //使能输出
}
void Show_Time(u8 Px)
{
u8 l,j;
for(l=0;l<4;l++) //循环扫描1/4行
{
for(j=0;j<12;j++)
{
SerialPut(Num[(calendar.hour/10)%10][3*4+l],Px);
SerialPut(Num[(calendar.hour/10)%10][2*4+l],Px);
SerialPut(Num[(calendar.hour/10)%10][1*4+l],Px);
SerialPut(Num[(calendar.hour/10)%10][0*4+l],Px); //小时十位
SerialPut(Num[(calendar.hour/1)%10][3*4+l],Px);
SerialPut(Num[(calendar.hour/1)%10][2*4+l],Px);
SerialPut(Num[(calendar.hour/1)%10][1*4+l],Px);
SerialPut(Num[(calendar.hour/1)%10][0*4+l],Px); //小时个位
SerialPut(Num[11][3*4+l],Px);
SerialPut(Num[11][2*4+l],Px);
SerialPut(Num[11][1*4+l],Px);
SerialPut(Num[11][0*4+l],Px); //:
SerialPut(Num[(calendar.min/10)%10][3*4+l],Px);
SerialPut(Num[(calendar.min/10)%10][2*4+l],Px);
SerialPut(Num[(calendar.min/10)%10][1*4+l],Px);
SerialPut(Num[(calendar.min/10)%10][0*4+l],Px); //分钟十位
SerialPut(Num[(calendar.min/1)%10][3*4+l],Px);
SerialPut(Num[(calendar.min/1)%10][2*4+l],Px);
SerialPut(Num[(calendar.min/1)%10][1*4+l],Px);
SerialPut(Num[(calendar.min/1)%10][0*4+l],Px); //分钟个位
SerialPut(Num[11][3*4+l],Px);
SerialPut(Num[11][2*4+l],Px);
SerialPut(Num[11][1*4+l],Px);
SerialPut(Num[11][0*4+l],Px); //:
SerialPut(Num[(calendar.sec/10)%10][3*4+l],Px);
SerialPut(Num[(calendar.sec/10)%10][2*4+l],Px);
SerialPut(Num[(calendar.sec/10)%10][1*4+l],Px);
SerialPut(Num[(calendar.sec/10)%10][0*4+l],Px); //秒钟十位
SerialPut(Num[(calendar.sec/1)%10][3*4+l],Px);
SerialPut(Num[(calendar.sec/1)%10][2*4+l],Px);
SerialPut(Num[(calendar.sec/1)%10][1*4+l],Px);
SerialPut(Num[(calendar.sec/1)%10][0*4+l],Px); //秒钟个位
SerialPut(Num[50][3*4+l],Px);
SerialPut(Num[50][2*4+l],Px);
SerialPut(Num[50][1*4+l],Px);
SerialPut(Num[50][0*4+l],Px); //空白
SerialPut(Num[50][3*4+l],Px);
SerialPut(Num[50][2*4+l],Px);
SerialPut(Num[50][1*4+l],Px);
SerialPut(Num[50][0*4+l],Px); //空白
}
Scan(l);
}
}
像串口扫描的话,通过传递Px给switch选择显示哪行(R1、2、3)来显示,一个Show_Time函数的话就这么多了,好累赘~~~
|
|