久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: [求助]求大俠幫忙分析分析此段程序錯在哪?謝謝了 [打印本頁]

作者: jackyliukai    時間: 2012-7-22 09:44
標題: [求助]求大俠幫忙分析分析此段程序錯在哪?謝謝了

想用ds1302和1602液晶做做時鐘的程序,在proteus仿真,但怎么也達不到要求。編譯無錯,運行結果出乎意料,只顯示0,而且時鐘沒工作。

各位大俠幫忙著分析分析,謝謝了。

 

/*************程序ds1302.c*****************/

#include <reg52.h>
#include "ds1302.h"
#include "lcd1602.h"

//uchar th[]="i am a teacher !";
void main()
{
 uchar i;
 struct _time time;
// struct _time *t=time;
 lcd_init();
 ds1302_init();
 set_time(ds1302_sec,5);
 set_time(ds1302_min,15);
 set_time(ds1302_hr,12);
 set_time(ds1302_date,21);
 set_time(ds1302_mon,12);
 set_time(ds1302_day,6);
 set_time(ds1302_year,12);
 while(1)
 {
  get_time(&time);
  date_to_format(&time);
  time_to_format(&time);
  lcd_write_cmd(0x80+0);
  for(i=0;i<9;i++)
  {
   lcd_write_dat(time.DateFormat);
   //lcd_write_dat(th); 
  }
  lcd_write_cmd(0x80+0x40);
  for(i=0;i<9;i++)
  {
   lcd_write_dat(time.TimeFormat);
   //lcd_write_dat(th); 
  }
  //delay_ms(100);  
 }
}

 

/*********************程序ds1302.h************************/

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

#define ds1302_sec 0x80
#define ds1302_min 0x82
#define ds1302_hr 0x84
#define ds1302_date 0x86
#define ds1302_mon 0x88
#define ds1302_day 0x8a
#define ds1302_year 0x8c


sbit ds1302_rst=P1^5;
sbit ds1302_sclk=P1^6;
sbit ds1302_io=P1^7;
sbit ACC7=ACC^7;
sbit ACC0=ACC^0;

struct _time
{
 unsigned char sec;
 unsigned char min;
 unsigned char hr;
 unsigned char date;
 unsigned char mon;
 unsigned char day;
 unsigned char year;
 unsigned char DateFormat[9];
 unsigned char TimeFormat[9];
};                                //定義的時間類型

 


void ds1302_write(uchar cmd,uchar dat)   //往指定地址寫入數據
{
 uchar i;
 ds1302_sclk=0;
 ds1302_rst=1;
 ACC=cmd;
 for(i=0;i<8;i++)
 {
  ds1302_io=ACC0;
  ds1302_sclk=1;
  ds1302_sclk=0;
  ACC=ACC>>1; 
 }
 ACC=dat;
 for(i=0;i<8;i++)
 {
  ds1302_io=ACC0;
  ds1302_sclk=1;
  ds1302_sclk=0;
  ACC=ACC>>1; 
 } 
 ds1302_sclk=1;
 ds1302_rst=0;
}

uchar ds1302_read(uchar cmd)    //讀出指定地址的數據
{
 uchar i;
 ds1302_sclk=0;
 ds1302_rst=1;
 ACC=cmd;
 for(i=0;i<8;i++)
 {
  ds1302_sclk=0;
  ds1302_io=ACC0;
  ds1302_sclk=1;
//  ds1302_sclk=0;
  ACC=ACC>>1; 
 }
 for(i=0;i<8;i++)
 {
//  ACC7=ds1302_io;
  ACC=ACC>>1;
  ds1302_sclk=1;
  ds1302_sclk=0;
  ACC7=ds1302_io;
 }
 ds1302_sclk=1;
 ds1302_rst=0;
 return ACC;
}

void ds1302_SetProtect(bit flag)        //設置寫保護
{
 if(flag)
  ds1302_write(0x8E,0x80);
 else
  ds1302_write(0x8E,0x00);
}

void set_time(uchar add,uchar var)  //設置時間
{
 ds1302_SetProtect(0);
 ds1302_write(add,((var/10)<<4|(var%10))); //轉成BCD碼
}

void get_time(struct _time *t)        //讀取時鐘寄存器放入time結構體
{
 uchar var;
 var=ds1302_read(ds1302_sec);
 t->sec=(var&0x70>>4)*10+(var&0x0f);
 var=ds1302_read(ds1302_min);
 t->min=(var&0x70>>4)*10+(var&0x0f);
 var=ds1302_read(ds1302_hr);
 t->hr=(var&0x70>>4)*10+(var&0x0f);
 var=ds1302_read(ds1302_date);
 t->date=(var&0x70>>4)*10+(var&0x0f);
 var=ds1302_read(ds1302_mon);
 t->mon=(var&0x70>>4)*10+(var&0x0f);
 var=ds1302_read(ds1302_day);
 t->day=(var&0x70>>4)*10+(var&0x0f);
 var=ds1302_read(ds1302_year);
 t->year=(var&0x70>>4)*10+(var&0x0f);
}

void date_to_format(struct _time *t)               //將日期數據轉化為日期格式并將數字轉為字符
{
 t->DateFormat[0] = t->year/10+'0';
 t->DateFormat[1] = t->year%10+'0';
 t->DateFormat[2] ='-';
 t->DateFormat[3] = t->mon/10+'0';
 t->DateFormat[4] = t->mon%10+'0';
 t->DateFormat[5] = '-';
 t->DateFormat[6] = t->date/10+'0';
 t->DateFormat[7] = t->date%10+'0';
 t->DateFormat[8] = '\0'; 
}

void time_to_format(struct _time *t)               //將時間數據轉化為時間格式并將數字轉為字符
{
 t->TimeFormat[0] = t->hr/10+'0';
 t->TimeFormat[1] = t->hr%10+'0';
 t->TimeFormat[2] =':';
 t->TimeFormat[3] = t->min/10+'0';
 t->TimeFormat[4] = t->min%10+'0';
 t->TimeFormat[5] = ':';
 t->TimeFormat[6] = t->sec/10+'0';
 t->TimeFormat[7] = t->sec%10+'0';
 t->TimeFormat[8] = '\0'; 
}
              //初始化啟動時鐘
void ds1302_init()
{
 uchar second=ds1302_read(ds1302_sec);
 if(second&0x80)   
  set_time(ds1302_sec,0);
}

 

 

/****************程序lcd1602.h*************************/

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit lcd_rs=P2^0;
sbit lcd_rw=P2^1;
sbit lcd_e=P2^2;

sfr lcd_d=0x80;

void delay_ms(uint ms)
{
 uint x,y;
 for(x=ms;x>0;x--)
  for(y=120;y>0;y--);
}

void lcd_write_cmd(uchar cmd)
{
 lcd_rs=0;
 lcd_rw=0;
 lcd_e=0;
 lcd_d=cmd;
 lcd_e=1;
 delay_ms(1);
 lcd_e=0;
}

void lcd_write_dat(uchar dat)
{
 lcd_rs=1;
 lcd_rw=0;
 lcd_e=0;
 lcd_d=dat;
 lcd_e=1;
 delay_ms(1);
 lcd_e=0;
}

void lcd_init()
{
 lcd_write_cmd(0x38);
 delay_ms(1);
 lcd_write_cmd(0x01);
 delay_ms(1);
 lcd_write_cmd(0x0c);
 delay_ms(1);
 lcd_write_cmd(0x06);
 delay_ms(1);
}






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲欧美中文字幕在线观看 | 操射视频| 极品的亚洲 | 国产成人精品久久二区二区91 | 欧美精品在线一区二区三区 | 成人高清网站 | 精品久 | 免费国产一区二区 | 国产成人精品久久二区二区91 | 国产欧美日韩久久久 | 91精品久久久久久久久久入口 | 国产高清在线精品一区二区三区 | 中文字幕精品一区二区三区精品 | 免费久久久 | 一级毛片视频免费观看 | 综合中文字幕 | 日韩专区中文字幕 | 免费成人高清在线视频 | 91在线导航 | 三级av网址 | 精品国产一级片 | 中文字幕精 | 在线色 | av中文字幕在线 | 91精品久久 | 国产精品大片在线观看 | 日韩中文在线视频 | 国产成人精品免高潮在线观看 | 国产二区在线播放 | 久久国产精品一区二区 | 欧美久久一区二区三区 | 久久精品免费 | av在线一区二区三区 | 国产欧美日韩综合精品一区二区 | 在线观看黄色电影 | 精品久久久久久 | 精品视频在线播放 | 精品久久一区 | 99这里只有精品 | 国内久久精品 | 日本精品裸体写真集在线观看 |