找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1868|回复: 2
收起左侧

网上的程序?前辈们帮看看---谢谢!

[复制链接]
ID:19947 发表于 2015-11-1 10:09 | 显示全部楼层 |阅读模式
//四位数码管电子钟----

#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
#define uchar unsigned char

#define unint unsigned int

sbit T_CLK=P2^4;
sbit T_IO=P3^1;
sbit T_RST=P3^0;
sbit gw=P2^3;
sbit sw=P2^2;
sbit bw=P2^1;
sbit qw=P2^0;
unint a[4];//{0,0,0,0};
uchar code ledk[10]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带小数
uchar code ledk1[10]=
{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数
unint ucCurtime[7]={30,59,23,26,07,02,0x06};//秒 分 时 日 月 星期 年
unint temp;

uchar data BUFFER[1]={0};
void delay()//延时
{
uchar m,n;
for(m=10;m>0;m--)
for(n=100;n>0;n--);
}
void v_RTInputByte(uchar ucDa)
{
uchar i;
ACC=ucDa;
for(i=8;i>0;i--);
{
if((ACC&0x01)==1)
T_IO=1;
else T_IO=0;
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
}
uchar uc_RTOutputByte(void)
{
uchar i,ACC;
ACC=0;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
if(T_IO==1)
ACC=ACC|0x80;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
void v_W1302(uchar ucAddr,uchar ucDa)
{
T_RST=0;
T_CLK=0;
T_RST=1;
v_RTInputByte(ucAddr);//地址,命令
v_RTInputByte(ucDa);//写1Byte数据
T_CLK=1;
T_RST=0;
}
uchar uc_R1302(uchar ucAddr)
{
unsigned char ucDa,k;
k=0x00;
T_RST=0;
T_CLK=0;
T_RST=1;
v_RTInputByte(ucAddr);//输入1个字节数据
ucDa=uc_RTOutputByte();//读取1个字节数据
T_CLK=1;
T_RST=0;
k=ucDa/16;//将10进制转换16进制
ucDa=ucDa%16;
ucDa=ucDa+k*10;
return(ucDa);
}
void v_Set1302()
{
uchar i,j;
uchar ucAddr=0x80;
v_W1302(0x8e,0X00);//控制命令wp=0写操作
for(i=0;i<7;i++)
{
j=ucCurtime[i];
v_W1302(ucAddr,j);//秒分时日月星期年
ucAddr +=2;
}
v_W1302(0x8e,0x80);//控制命令wp=1写保护
}
void v_Get1302()//读1302里数据
{
uchar i;
uchar ucAddr=0x81;
for(i=0;i<7;i++)
{
ucCurtime[i]=uc_R1302(ucAddr);//格式,秒分时日月星期年
ucAddr +=2;
}
}
void t2_10()
{
unint k;
a[3]=temp/1000;
k=temp&1000;
a[2]=k/100;
k=k&100;
a[1]=k/10;
a[0]=k&10;
}
void dieplay()//显示--1
{
uchar c;
t2_10();
c=a[0];
P1=ledk[c];
gw=0;
delay();
gw=1;

c=a[1];
P1=ledk[c];
sw=0;
delay();
sw=1;

c=a[2];
P1=ledk1[c];//带小数点
bw=0;
delay();
bw=1;

c=a[3];
P1=ledk[c];
qw=0;
delay();
qw=1;
}
void display2()//显示--2
{
uchar c;
t2_10();
c=a[0];
P1=ledk[c];
gw=0;
delay();
gw=1;

c=a[1];
P1=ledk[c];
sw=0;
delay();
sw=1;

c=a[2];
P1=ledk[c];
bw=0;
delay();
bw=1;

c=a[3];
P1=ledk[c];
qw=0;
delay();
qw=1;
}
void main1(void)
{
v_Get1302();
temp=ucCurtime[4]*100+ucCurtime[3];//temp的值是显示去数码管的值
display1();
}
void main2(void)
{
v_Get1302();
temp=ucCurtime[4]*100+ucCurtime[3];
display2();
}
void main()
{
unint i,k;
for(i=0;i<7;i++)
{
k=ucCurtime[i]/10;//将数组16进制转10进制
ucCurtime[i]=ucCurtime[i]%10;
ucCurtime[i]=ucCurtime[i]+16*k;
}
v_Set1302();
while(1)
{
BUFFRE[0]=BUFFER[0]+1;
if(BUFFER[0]==101)
{
main1();
BUFFER[0]=0;
}
else main2();
}
}


回复

使用道具 举报

ID:19947 发表于 2015-11-1 10:12 | 显示全部楼层
不知键盘输入?
(1PDQGLOCN(YFFC0$65QU2F.png
回复

使用道具 举报

ID:18867 发表于 2015-11-1 19:20 | 显示全部楼层
好像没有按键程序哟!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表