帮我看下程序,为什么显示不出来用DS1302和1602显示
[复制链接]
/*********************************包含头文件********************************/ #include "reg51.h" #include<intrins.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int /*********************************端口定义**********************************/ sbit DS1302_CLK = P1^0; sbit DS1302_IO = P1^1; sbit DS1302_RST = P1^2; sbit dula=P2^6; sbit wela=P2^7; sbit rs=P3^5; sbit lcden=P3^4; /******************************定义全局变量*********************************/ unsigned char second,minute,hour,week,day,month,year; //秒、分、时、星期、日、月、年 unsigned char time[]={0x06,0x03,0x14,0x03,0x12,0x30,0x00}; //初始时间数组 /**************************************************************************** 函数功能:数码管扫描延时子程序 入口参数: 出口参数: ****************************************************************************/ void delay(uint t) //50us { char i; for(;t>0;t--) for(i=19;i>0;i--); } /***************************************************************************** 函数功能:向DS1302送一字节数据子程序 入口参数: 出口参数: *****************************************************************************/ void InputByte(unsigned char byte1) { char i; for(i=8;i>0;i--) { DS1302_IO=(bit)(byte1&0x01); DS1302_CLK=1; _nop_(); DS1302_CLK=0; byte1>>=1; } } /***************************************************************************** 函数功能:读DS1302一个字节子程序 入口参数: 出口参数: *****************************************************************************/ unsigned char outputbyte(void) { unsigned char i; unsigned ucdat=0; for(i=8;i>0;i--) { DS1302_IO=1; ucdat>>=1; if(DS1302_IO)ucdat|=0x80; DS1302_CLK=1; _nop_(); DS1302_CLK=0; } return(ucdat); } /***************************************************************************** 函数功能:向DS1302某地址写一字节数据子程序 入口参数:addr,TDat 出口参数: *****************************************************************************/ void write_ds1302(unsigned char addr,unsigned char TDat) { DS1302_RST=0; _nop_(); DS1302_CLK=0; _nop_(); DS1302_RST=1; InputByte(addr); _nop_(); InputByte(TDat); DS1302_CLK=1; _nop_(); DS1302_RST=0; } /***************************************************************************** 函数功能:读DS1302地址子程序 入口参数:add 出口参数:timedata *****************************************************************************/ unsigned char read_ds1302(unsigned char addr) { unsigned char timedata; DS1302_RST=0; _nop_(); DS1302_CLK=0; _nop_(); DS1302_RST=1; InputByte(addr); timedata=outputbyte(); DS1302_CLK=1; _nop_(); DS1302_RST=0; return(timedata); } /***************************************************************************** 函数功能:初始化DS1302子程序 入口参数:time[](全局变量) 出口参数: *****************************************************************************/ void initial_ds1302() { write_ds1302(0x8e,0x00); //写保护寄存器,在对时钟或RAM写前WP一定要为0 write_ds1302(0x8c,time[0]); //年 write_ds1302(0x88,time[1]); //月 write_ds1302(0x86,time[2]); //日 write_ds1302(0x8A,time[3]); //星期 write_ds1302(0x84,time[4]); //时 write_ds1302(0x82,time[5]); //分 write_ds1302(0x80,time[6]); //秒 write_ds1302(0x8e,0x80); //写保护寄存器 } /***************************************************************************** 函数功能:读DS1302时间子程序 入口参数: 出口参数:全局变量(second,minute,hour,week,day,month,year) *****************************************************************************/ void read_time() { second=read_ds1302(0x81); //秒寄存器 minute=read_ds1302(0x83); //分 hour=read_ds1302(0x85); //时 week=read_ds1302(0x8B); //星期 day=read_ds1302(0x87); //日 month=read_ds1302(0x89); //月 year=read_ds1302(0x8d); //年 } void write_com(uchar com) { P0=com; rs=0; lcden=0; _nop_(); lcden=1; _nop_(); lcden=0; } //液晶读写程序// void write_date(uchar date) { P0=date; rs=1; lcden=0; _nop_(); lcden=1; _nop_(); lcden=0; }
void init() { dula=0; wela=0; delay(300); write_com(0x38); delay(100); write_com(0x38); delay(100); write_com(0x38); delay(100); write_com(0x38); delay(100); write_com(0x0f); delay(100); write_com(0x06); delay(100); write_com(0x01); delay(100); } //液晶显示时间程序// void time_display() { write_com(0x80); write_date(year); write_com(0x80+5); write_date(month); write_com(0x80+8); write_date(day); write_com(0x80+11); write_date(week); } /***************************************************************************** 函数功能:主程序 入口参数: 出口参数: *****************************************************************************/ void main(void) { init(); initial_ds1302(); //初始化DS1302 while(1) { read_time(); //读取时间 time_display(); //显示时间 } }
|