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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3618|回復: 0
打印 上一主題 下一主題
收起左側

[求助]求大俠幫忙分析分析此段程序錯在哪?謝謝了

[復制鏈接]
跳轉到指定樓層
樓主
ID:43135 發表于 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);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91网视频 | 99爱免费| 成人免费在线小视频 | 亚洲国产成人精品女人久久久 | 日韩欧美一区二区三区免费观看 | 国产成人小视频 | 亚洲一区二区三区四区五区午夜 | 超碰在线免费av | 精品不卡 | 欧美黄在线观看 | 黄色网址免费看 | 国产福利久久 | 欧美在线日韩 | 久久精品国产一区二区三区 | 国产剧情一区 | 性色综合 | 国产精品免费看 | 日本不卡免费新一二三区 | 久久成人激情 | 精品国产91| 国产免费一区二区 | 日韩精品一区二区三区中文在线 | 中文av在线播放 | 天天色综| jlzzjlzz国产精品久久 | av在线黄 | 国产精品中文字幕一区二区三区 | 超碰97免费在线 | 日韩精品视频一区二区三区 | 黄色一级大片在线免费看产 | 国产电影一区二区在线观看 | 91在线影院 | 免费色网址 | 亚洲高清视频一区二区 | 欧美国产精品一区二区三区 | 日韩在线中文字幕 | 中文字幕在线观看视频一区 | 亚洲一区视频在线 | 中国美女一级黄色片 | 亚洲高清在线观看 | 99精品视频免费观看 |