qq_34860335 2016-05-08 14:59 采纳率: 0%
浏览 2011
已结题

麻烦哪位大神看一下下面关于DS1302和1602液晶显示器的程序,为啥仿真显示的星期总是后一天的呀

麻烦哪位大神看一下下面关于DS1302和1602液晶显示器的程序,为啥仿真显示的星期总是后一天的呀,比如今天星期三,就显示成星期四
图片说明
下面是的DS1302的程序
#include
#include
//#define uchar unsigned char
//#define uint unsigned int
/*复位脚*/
#define RST_CLR PORTB&=~(1< #define RST_SET PORTB|=(1 #define RST_IN DDRB&=~(1 #define RST_OUT DDRB|=(1 /*双向数据*/
#define IO_CLR PORTB&=~(1 #define IO_SET PORTB|=(1 #define IO_R PINB&(1 #define IO_IN DDRB&=~(1 #define IO_OUT DDRB|=(1 /*时钟信号*/
#define SCK_CLR PORTB&=~(1 #define SCK_SET PORTB|=(1 #define SCK_IN DDRB&=~(1 #define SCK_OUT DDRB|=(1 /*函数声明*/
void Delay_us(uint us);
void write_byte(uchar inbyte);
uchar read_byte(void);
void write_ds1302(uchar cmd,uchar indata);
uchar read_ds1302(uchar addr);
void set_ds1302(uchar addr,uchar *p,uchar n);
void init_ds1302(void);
/*us延时函数*/
void Delay_us(uint us)
{
uint i;
us=us*5/4;
for(i=0;i }
/*从ds1302中读一字节数据*/
uchar read_byte(void)
{
uchar i,dat=0;
IO_IN;
IO_CLR;
for(i=0;i {
SCK_SET;
Delay_us(10);
SCK_CLR;
Delay_us(10);
if(IO_R)
{dat=dat|0x80;}
else
{dat=dat&0x7f;}
SCK_SET;
dat=dat>>1;
}
IO_OUT;
return dat;
}
/*向ds1302中写入一字节数据*/
void write_byte(uchar dat)
{
uchar i;
for(i=0;i {
SCK_CLR;
if(dat&0x01)
{
IO_SET;
}
else
{
IO_CLR;
}
Delay_us(10);
SCK_SET;
dat>>=1;
}
}
/*从ds1302的指定地址读一字节数据*/
uchar read_ds1302(uchar addr)
{
char data;
RST_CLR;
SCK_CLR;
Delay_us(10);
RST_SET;
Delay_us(10);
write_byte(addr);
Delay_us(10);
data=read_byte();
Delay_us(10);
SCK_CLR;
RST_CLR;
return data;
}

void write_ds1302(uchar addr,uchar data)
{
RST_CLR;
SCK_CLR;
Delay_us(10);
RST_SET;
Delay_us(10);
write_byte(addr);
Delay_us(10);
SCK_CLR;
Delay_us(10);
write_byte(data);
SCK_CLR;
Delay_us(10);
RST_CLR;
}

/*设置初始时间函数*/
void set_ds1302(uchar addr,uchar *p,uchar n)
{
write_ds1302(0x8e,0x00);
for(;n>0;n--)
{
write_ds1302(addr,*p);
p++;
addr=addr+2;
}
write_ds1302(0x8e,0x80);
}

/*初始化ds1302*/
void init_ds1302()
{
RST_CLR;
SCK_CLR;
//RST_OUT;
//SCK_OUT;
write_ds1302(0x80,0x00);
write_ds1302(0x90,0xab);
write_ds1302(0x8e,0x80);
}
下面是1602的程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define RS_0 PORTC&=~(1<<PC0)
#define RS_1 PORTC|=(1<<PC0)
#define RW_0 PORTC&=~(1<<PC1)
#define RW_1 PORTC|=(1<<PC1)
#define EN_0 PORTC&=~(1<<PC2)
#define EN_1 PORTC|=(1<<PC2)

/*函数声明*/
void delay_us(uint n);
void Delay_ms(uint xms);
uchar lcd_busy(void);
void lcd_wcmd(uchar cmd);
void lcd_wdat(uchar dat);
void lcd_clr(void);
void lcd_init(void);
void LocateXY(uchar x,uchar y);
void LCD_write_char(uchar x,uchar y,uchar data);
void LCD_write_str(uchar x,uchar y,uchar s);
/*us延时函数
/
void delay_us(uint n)
{
if(n==0)
return;
while(n--);
}
/*ms延时函数*/
void Delay_ms(uint xms)
{
int i,j;
for(i=0;i<xms;i++)
{
for(j=0;j<1140;j++);
}
}

/*LCD忙碌检测函数*/
uchar lcd_busy()
{
uchar result;
DDRA=0X00;
RS_0;
RW_1;
EN_1;
delay_us(40);
result=PINA&0X80;
EN_0;
return result;
}

/*写指令寄存器IR函数*/
void lcd_wcmd(uchar cmd)
{
DDRA=0xff;
RS_0;
RW_0;
EN_0;
PORTA=cmd;
EN_1;
delay_us(40);
EN_0;
}
/*写寄存器DR函数*/
void lcd_wdat(uchar dat)
{
DDRA=0XFF;
RS_1;
RW_0;
EN_0;
PORTA=dat;
delay_us(40);
EN_1;
delay_us(40);
EN_0;
}
/**LCD清屏程序*/
void lcd_clr()
{
lcd_wcmd(0x01);
Delay_ms(5);
}
/*lcd初始化函数*/
void lcd_init()
{
Delay_ms(15);
while(lcd_busy());
lcd_wcmd(0x38);
Delay_ms(10);
while(lcd_busy());
lcd_wcmd(0x38);
Delay_ms(10);
while(lcd_busy());
lcd_wcmd(0x38);
Delay_ms(10);
while(lcd_busy());
lcd_wcmd(0x0c);
Delay_ms(10);
while(lcd_busy());
lcd_wcmd(0x06);
Delay_ms(10);
while(lcd_busy());
lcd_wcmd(0x10);
Delay_ms(10);
}
/*光标定位函数*/
void LocateXY(uchar x,uchar y)
{
if(y==0)
{
lcd_wcmd(0x80+x);
}
else
{
lcd_wcmd(0xc0+x);
}
}
/*显示屏字符串写入函数*/
void LCD_write_str(uchar x,uchar y,uchar s)
{
LocateXY(x,y);
while(*s)
{
lcd_wdat(*s);
s++;
}
}
/
显示屏单字符写入函数*/
void LCD_write_char(uchar x,uchar y,uchar data)
{
LocateXY(x,y);
lcd_wdat(data);
}

  • 写回答

2条回答 默认 最新

  • havedream_one 2016-05-09 00:13
    关注

    首先看看ds1302的星期一是从0开始还是从1开始,感觉能显示正常程序应该没问题

    评论

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题