万年历 求指教

2019-07-18 13:45发布

求哪位大侠看一下我的程序 ,是不是存在问题???不显示

附上程序:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char

#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)
#define er 0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)

//液晶与51之间的连接定义
sbit dula=P2^6;
sbit wela=P2^7;
sbit rs=P1^0;
sbit en=P2^5;
sbit rw=P1^1;

//按键引脚定义
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;

//DS1302时钟芯片与C51之间的引脚连接定义
sbit IO=P2^0;//数据线
sbit SCLK=P2^1;
sbit RST=P2^4;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;

uchar num,count,h,m,s,day,month,year;
uchar code table[]="20  -  -      ";
uchar code table1[]="  :  :  ";

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void write_com(uchar com)//读命令函数
{
        rs=0;
        en=0;
        P0=com;
        delay(5);
        en=1;
        delay(5);
        en=0;
}

void write_date(uchar date)//写命令函数
{
        rs=1;
        en=0;
        P0=date;
        delay(5);
        en=1;
        delay(5);
        en=0;
}

void lcd1602_init()//液晶初始化函数
{
        rw=0;
        dula=0;
        wela=0;
        en=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        write_com(yh+1);
        for(num=0;num<14;num++)
        {
                write_date(table[num]);
                delay(5);
        }
        write_com(yh+er+2);
        for(num=0;num<11;num++)
        {
                write_date(table1[num]);
                delay(5);               
        }
}

void init()//定时器初始化函数
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}

void write_byte(uchar date)//写一个字节
{
       
        ACC=date;
        RST=1;
        for(num=8;num>0;num--)
        {
                IO=ACC0;
                SCLK=0; //产生上升沿写入数据,从低位写入
                SCLK=1;
                ACC=ACC>>1;
        }
}

uchar read_byte()//读一个字节
{
        RST=1;
        for(num=8;num>0;num--)
        {
                ACC7=IO;
                SCLK=1; //产生下降沿输出数据,先输出低位,保存到ACC中
                SCLK=0;
                ACC=ACC>>1;
        }
        return (ACC);
}

void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据
{
        RST=0;
        SCLK=0;
        RST=1;
        write_byte(add);
        write_byte(dat);
        SCLK=1;
        RST=0;
}

uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址
{
        uchar temp;
        RST=0;
        SCLK=0;
        RST=1;
        write_byte(add);
        temp=read_byte();
        SCLK=1;
        RST=0;
        return(temp);
}

uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制
{
        uchar Decimal;
        Decimal=bcd>>4;
        return(Decimal=Decimal*10+(bcd&=0x0F));
}

void ds1302_init() //1302芯片初始化子函数(2012-06-18,12:00:00,week7)
{
        RST=0;
        SCLK=0;
        write_1302(0x8e,0x00); //允许写,禁止写保护
        write_1302(0x80,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00
        write_1302(0x82,0x00);//向DS1302内写分寄存器82H写入初始分数据00
        write_1302(0x84,0x12);//向DS1302内写小时寄存器84H写入初始小时数据12
        write_1302(0x8a,0x07);//向DS1302内写周寄存器8aH写入初始周数据4
        write_1302(0x86,0x17);//向DS1302内写日期寄存器86H写入初始日期数据18
        write_1302(0x88,0x06);//向DS1302内写月份寄存器88H写入初始月份数据06
        write_1302(0x8c,0x12);//向DS1302内写年份寄存器8cH写入初始年份数据12
        write_1302(0x8e,0x80); //打开写保护
}

void main()
{
        init();
        lcd1602_init();
        ds1302_init();
        while(1);       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
爱﹏奔跑
1楼-- · 2019-07-18 14:44
附上电路图

附上电路图

附上电路图
爱﹏奔跑
2楼-- · 2019-07-18 20:02
求指教   大侠们   闲暇时间   教教我啊、、、

一周热门 更多>