【文件属性】:
文件名称:TM1629A资料
文件大小:416KB
文件格式:PDF
更新时间:2016-04-06 14:38:38
资料
LED数#include
#include
#define ulong unsigned long
#define uchar unsigned char
#define _Nop() _nop_()
sbit T_CLK = P1^0;
sbit T_IO = P1^1;
sbit T_RST = P1^2;
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
sbit DA_in_port = P0^2;
sbit CLK_port = P0^1;
sbit Latch_port = P0^0;
uchar data time_data[8]={0x00,0x57,0x16,0x00,0x00,0x00,0x00,0x00};
uchar code shum[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x40};
uchar code shha[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar shu1,shu2,shu3,shu4,shu5,shu6,shu7,shu8;
void W1302(uchar ucAddr, uchar ucDa)//写1字节
{
uchar i;
//写地址
T_RST=0;
T_CLK=0;//增加
T_RST=1;
ACC=ucAddr;
for(i=8;i>0;i--) //修改了
{
T_IO=ACC0; //修改了,这里不能用ACC^0,要在前面定义
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
//写数据
ACC=ucDa;
for(i=8;i>0;i--) //修改了
{
T_IO=ACC0; //修改了,这里不能用ACC^0,要在前面定义
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
T_CLK=1;
T_RST=0;
}
uchar R1302(uchar ucAddr) //读1字节
{
uchar i;
ACC=ucAddr;
T_RST=0;
T_CLK=0;
T_RST=1;
for(i=8;i>0;i--) //修改了
{
T_IO=ACC0; //修改了,这里不能用ACC^0,要在前面定义
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
for(i=8;i>0;i--) //修改了
{
ACC=ACC>>1;
ACC7=T_IO;
T_CLK=1;
T_CLK=0; //修改了
}
T_CLK=1;
T_RST=0;
return(ACC);
}
void Set1302(uchar *pClock)
{
uchar i;
uchar ucAddr = 0x80;
W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i =7; i>0; i--)
{
W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
pClock++;
ucAddr +=2;
}
W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}
void Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
for (i=0; i<7; i++)
{
ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
}
void HC595_Data_Send()
{
uchar ab,i,daH,hang;
for(ab=0;ab<8;ab++)
{ switch(ab)
{ case 0:
daH=shum[shu1];
break;
case 1:
daH=shum[shu2];
break;
case 2:
daH=shum[shu3];
break;
case 3:
daH=shum[shu4];
break;
case 4:
daH=shum[shu5];
break;
case 5:
daH=shum[shu6];
break;
case 6:
daH=shum[shu7];
break;
case 7:
daH=shum[shu8];
break;
}
hang=shha[ab];
Latch_port = 0; /*HC595锁定输出,避免数据传输过程中,屏数据变化从而显示闪烁*/
CLK_port = 0;
for(i=0;i<8;i++)
{
if((daH&0x80;)!=0) DA_in_port = 1;
else DA_in_port = 0;
CLK_port = 1;
CLK_port = 0;
daH <<= 1;
}
for(i=0;i<8;i++)
{
if((hang&0x80;)!=0) DA_in_port = 1;
else DA_in_port = 0;
CLK_port = 1;
CLK_port = 0;
hang <<= 1;
}
Latch_port = 1; /*允许HC595数据输出到Q1-Q8端口*/
Latch_port = 0; /*锁定HC595数据输出*/
}
}
void main()
{ Set1302(time_data);
while(1)
{ Get1302(time_data);
shu8=time_data[0];
shu7=time_data[0]/10;
shu6=16;
shu5=time_data[1];
shu4=time_data[1]/10;
shu3=16;
shu2=time_data[2];
shu1=time_data[2]/10;
HC595_Data_Send();
}
}
码管驱动