不知道你做的是led还是lcd的,之前做了一个led的,程序代码如下,希望能帮到你,要是用lcd的改下显示就行了,也可以到我空间看看的,有问题随时交流下
#include
//#include"DS18B20_3.H"
#define uint unsigned int
#define uchar unsigned char
uchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp,key4n;//sheding为调节打铃时间时显示
//flag用于读取头文件中的温度值,和显示温度值
uchar code Seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
unsigned int s_1,s_2,s_3,s_4,s_5,s_6;
#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)
#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)
uchar flag_xs=0,flag_m,flag_m1,flag_f,flag_f1,flag_s,flag_s1;
uchar flag_n,flag_n1,flag_y,flag_y1,flag_r,flag_r1,flag_mb;
uint numt;
//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)
//DS1302时钟芯片与C51之间的引脚连接定义
sbit IO=P1^1;
sbit SCLK=P1^0;
sbit RST=P1^2;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit nyr=P3^1;
sbit sfm=P3^0;
/************************************************************
ACC累加器=A
ACC.0=E0H
ACC.0就是ACC的第0位。Acc可以位寻址。
累加器ACC是一个8位的存储单元,是用来放数据的。但是,这个存储单元有其特殊的地位,
是单片机中一个非常关键的单元,很多运算都要通过ACC来进行。以后在学习指令时,
常用A来表示累加器。但有一些地方例外,比如在PUSH指令中,就必须用ACC这样的名字。
一般的说法,A代表了累加器中的内容、而ACC代表的是累加器的地址。
***************************************************************/
//校时按键与C51的引脚连接定义
sbit key1=P1^4; //设置键
sbit key2=P1^5; //加键
sbit key3=P1^6; //减键
sbit key4=P1^3; //秒表
/**************************************************************/
void delay(uint xms)//延时函数,有参函数
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
void write_sfm(uchar com,uchar miao)
{
uchar ge,shi;
sfm=1;
nyr=0;
// P3=0;
shi=miao/10;
ge=miao%10;
P2=com;
P0=Seg[ge];
delay(3);
P2=com>>1;
P0=Seg[shi];
delay(3);
}
void write_sfm_(uchar com)
{
P2=0;
nyr=0;
sfm=1;
P2=com;
P0=Seg[10];
delay(2);
P2=com>>3;
P0=Seg[10];
delay(2);
}
void write_nyr(uchar com,uchar dat)
{
uchar ge,shi;
P2=0;
nyr=1;
sfm=0;
shi=dat/10;
ge=dat%10;
P2=com;
P0=Seg[ge];
delay(3);
P2=com>>1;
P0=Seg[shi];
delay(3);
}
void write_nyr_(uchar com)
{
P2=0;
nyr=1;
sfm=0;
P2=com;
P0=Seg[10];
delay(2);
P2=com>>3;
P0=Seg[10];
delay(2);
}
void display_1(int d_1,int d_2,int d_3,int d_4,int d_5,int d_6)//LED时间显示(用于秒表)
{
P2=0;
nyr=0;
sfm=1;
P2=0x01;
P0=Seg[d_1];
delay(2);
P2=0x02;
P0=Seg[d_2];
delay(2);
//P0=0x04;
//P2=0xbf;
//delay(2);
P2=0x08;
P0=Seg[d_3];
delay(2);
P2=0x10;
P0=Seg[d_4];
delay(2);
//P0=0x20;
//P2=0xbf;
//delay(2);
P2=0x40;
P0=Seg[d_5];
delay(2);
P2=0x80;
P0=Seg[d_6];
delay(2);
}
void second()//秒表
{
display_1(s_1,s_2,s_3,s_4,s_5,s_6);
s_6++;
if(s_6>9)
{
s_6=0;
s_5++;
}
if(s_5>9)
{
s_5=0;
s_4++;
}
if(s_4>9)
{
s_4=0;
s_3++;
}
if(s_3>5)
{
s_3=0;
s_2++;
}
if(s_2>9)
{
s_2=0;
s_1++;
}
if(s_1>5)
{
s_1=0;
}
}
/***************DS1302有关子函数********************/
void write_byte(uchar dat)//写一个字节
{
ACC=dat;
RST=1;
for(a=8;a>0;a--)
{
IO=ACC0;
SCLK=0;
SCLK=1;
ACC=ACC>>1;
}
}
uchar read_byte()//读一个字节
{
RST=1;
for(a=8;a>0;a--)
{
ACC7=IO;
SCLK=1;
SCLK=0;
ACC=ACC>>1;
}
return (ACC);
}
电路如下
区电子发烧友这个网站吧,里面有
我来帮你做做