欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于DS1302的數據處理問題

[復制鏈接]
跳轉到指定樓層
樓主
程序是讀DS1302,數碼管顯示
現在遇到的問題是讀取的數據在數碼管顯示的時候只要前一個數據是雙數,后一個數據就會變亂碼


例如aa-bb-cc,如果AA是雙數,BB就會亂碼
上個圖




二樓貼程序,是我數據處理錯了嗎?為什么我一直找不出來= =
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:73669 發表于 2015-2-15 16:13 | 只看該作者
這是DS1302的驅動文件


#include "ds1302.h"


unsigned char time_buf1[8] = {20,15,3,27,18,15,00,5};//空年月日時分秒周
unsigned char time_buf[8]; //空年月日時分秒周
/*------------------------------------------------
向DS1302寫入一字節數據
------------------------------------------------*/
void Ds1302_Write_Byte(unsigned char addr, unsigned char d)
{


unsigned char i;
RST_SET;

//寫入目標地址:addr
addr = addr & 0xFE; //最低位置零
for (i = 0; i < 8; i ++)
{
if (addr & 0x01)
{
IO_SET;
}
else
{
IO_CLR;
}
SCK_SET;
SCK_CLR;
addr = addr >> 1;
}

//寫入數據:d
for (i = 0; i < 8; i ++)
{
if (d & 0x01)
{
IO_SET;
}
else
{
IO_CLR;
}
SCK_SET;
SCK_CLR;
d = d >> 1;
}
RST_CLR;//停止DS1302總線
}
/*------------------------------------------------
從DS1302讀出一字節數據
------------------------------------------------*/


unsigned char Ds1302_Read_Byte(unsigned char addr)
{


unsigned char i;
unsigned char temp;
RST_SET;


//寫入目標地址:addr
addr = addr | 0x01;//最低位置高
for (i = 0; i < 8; i ++)
{

if (addr & 0x01)
{
IO_SET;
}
else
{
IO_CLR;
}
SCK_SET;
SCK_CLR;
addr = addr >> 1;
}

//輸出數據:temp
for (i = 0; i < 8; i ++)
{
temp = temp >> 1;
if (IO_R)
{
temp |= 0x80;
}
else
{
temp &= 0x7F;
}
SCK_SET;
SCK_CLR;
}

RST_CLR;//停止DS1302總線
return temp;
}


/*------------------------------------------------
向DS1302寫入時鐘數據
------------------------------------------------*/
void Ds1302_Write_Time(void)
{

unsigned char i,tmp;
for(i=0;i<8;i++)
{ //BCD處理
tmp=time_buf1[i]/10;
time_buf[i]=time_buf1[i]%10;
time_buf[i]=time_buf[i]+tmp*16;
}
Ds1302_Write_Byte(ds1302_control_add,0x00);//關閉寫保護
Ds1302_Write_Byte(ds1302_sec_add,0x80);//暫停
//Ds1302_Write_Byte(ds1302_charger_add,0xa9);//涓流充電
Ds1302_Write_Byte(ds1302_year_add,time_buf[1]);//年
Ds1302_Write_Byte(ds1302_month_add,time_buf[2]);//月
Ds1302_Write_Byte(ds1302_date_add,time_buf[3]);//日
Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);//周
Ds1302_Write_Byte(ds1302_hr_add,time_buf[4]);//時
Ds1302_Write_Byte(ds1302_min_add,time_buf[5]);//分
Ds1302_Write_Byte(ds1302_sec_add,time_buf[6]);//秒
Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);//周
Ds1302_Write_Byte(ds1302_control_add,0x80);//打開寫保護
}


/*------------------------------------------------
從DS1302讀出時鐘數據
------------------------------------------------*/
void Ds1302_Read_Time(void)
{
unsigned char i,tmp;
time_buf[1]=Ds1302_Read_Byte(ds1302_year_add);//年
time_buf[2]=Ds1302_Read_Byte(ds1302_month_add);//月
time_buf[3]=(Ds1302_Read_Byte(ds1302_date_add)); //日
time_buf[4]=Ds1302_Read_Byte(ds1302_hr_add);//時
time_buf[5]=Ds1302_Read_Byte(ds1302_min_add);//分
time_buf[6]=(Ds1302_Read_Byte(ds1302_sec_add))&0x7F;//秒
time_buf[7]=Ds1302_Read_Byte(ds1302_day_add);//周




for(i=0;i<8;i++)
{ //BCD處理
tmp=time_buf[i]/16;
time_buf1[i]=time_buf[i]%16;
time_buf1[i]=time_buf1[i]+tmp*10;
}
}


/*------------------------------------------------
DS1302初始化
------------------------------------------------*/
void Ds1302_Init(void)
{

RST_CLR;//RST腳置低
SCK_CLR;//SCK腳置低
Ds1302_Write_Byte(ds1302_sec_add,0x00);
}
回復

使用道具 舉報

板凳
ID:73669 發表于 2015-2-15 16:14 | 只看該作者
main函數在這
#include"stc15f2k60s2.h"
#include"ds1302.h"
#include"intrins.h"


#define uchar unsigned char
#define uint unsigned int


sbit Wr=P3^6;


#define rst573 P2&=0x1f//關閉選中
#define smgY6C P2|=0xc0 //位選
#define smgY7C P2|=0xe0 //段選
#define ledY4C P2|=0x80 //選中LED
#define beeY5C P2|=0xa0 //選中蜂鳴器+繼電器


sbit k0=P3^0;
sbit k1=P3^1;
sbit k2=P3^2;
sbit k3=P3^3;
//行線
sbit k4=P3^4;
sbit k5=P3^5;
sbit k6=P4^2;
sbit k7=P4^4;
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
// 全滅+ 1~8wei
uchar code wei[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位碼


uchar num=0,time;
void CHS_BEEP_close() //關閉蜂鳴器繼電器
{ Wr=0;
P2=0x5;
P06=1;
P04=0;
Wr=1;
}


void delay(uint z)//ms延時函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=1100;y>0;y--);
}


void display(uchar adt1,uchar adt2,uchar adt3)
{




P0=0x00; //消影
delay(1);
Wr=0; //位選
smgY6C;
P0=wei[1];
P2=0x1f;


Wr=0;
smgY7C; //段選
P0=duan[adt1/10];
P2=0x1f;
Wr=1;


delay(1);
Wr=0; //位選
smgY6C;
P0=wei[2];
P2=0x1f;


Wr=0;
smgY7C; //段選
P0=duan[adt1%10];
P2=0x1f;
Wr=1;


delay(1);
Wr=0; //位選
smgY6C;
P0=wei[3];
P2=0x1f;


Wr=0;
smgY7C; //段選
P0=0xbf;
P2=0x1f;
Wr=1;


delay(1);
Wr=0; //位選
smgY6C;
P0=wei[4];
P2=0x1f;


Wr=0;
smgY7C; //段選
P0=duan[adt2/10];
P2=0x1f;
Wr=1;


delay(1);
Wr=0; //位選
smgY6C;
P0=wei[5];
P2=0x1f;


Wr=0;
smgY7C; //段選
P0=duan[adt2%10];
P2=0x1f;
Wr=1;


delay(1);
Wr=0; //位選
smgY6C;
P0=wei[6];
P2=0x1f;


Wr=0;
smgY7C; //段選
P0=0xbf;
P2=0x1f;
Wr=1;


delay(1);
Wr=0; //位選
smgY6C;
P0=wei[7];
P2=0x1f;


Wr=0;
smgY7C; //段選
P0=duan[adt3/10];
P2=0x1f;
Wr=1;


delay(1);
Wr=0; //位選
smgY6C;
P0=wei[8];
P2=0x1f;


Wr=0;
smgY7C; //段選
P0=duan[adt3%10];
P2=0x1f;
Wr=1;


}
void keyscan()
{
if(k0==0){delay(50);if(k0==0)num=0;while(!k0);}
if(k1==0){delay(50);if(k1==0)num=1;while(!k1);}
}
void init_time()
{
TMOD=0x00; //16位自動重裝定時器
TH0=0xec; //定時5MS
TL0=0x78;
ET0=1;
EA=1;
TR0=1;
}
void main()


{
init_time();
CHS_BEEP_close();
Ds1302_Init();
Ds1302_Write_Time();
Ds1302_Read_Time();
while(1)
{
keyscan();
if(num)display(time_buf1[1],time_buf1[2],time_buf1[3]);//顯示年月日
else display(time_buf1[4],time_buf1[5],time_buf1[6]);//顯示時分秒
}
}


void timer_0() interrupt 1
{
time++;
if(time==20) //定時讀數據
{
Ds1302_Read_Time();
time=0;
}


}
回復

使用道具 舉報

地板
ID:73669 發表于 2015-2-15 19:04 | 只看該作者
自頂一下
回復

使用道具 舉報

5#
ID:73669 發表于 2015-2-16 12:11 | 只看該作者
人工置頂
回復

使用道具 舉報

6#
ID:508281 發表于 2019-4-9 21:27 | 只看該作者
#include <REGX52.H> #include "LCD1602.h" #include "DS1302.h"  void Delay1ms(unsigned int count) {         unsigned int i,j;         for(i=0;i<count;i++)         for(j=0;j<120;j++); }  main() {         SYSTEMTIME CurrentTime;         LCD_Initial();         Initial_DS1302();          GotoXY(0,0);         Print(" tian ma dian zi");         GotoXY(0,1);         Print("Time: ");                  while(1)         {                 DS1302_GetTime(&CurrentTime);                 TimeToStr(&CurrentTime);                 GotoXY(6,1);                 Print(CurrentTime.TimeString);                  Delay1ms(400);         } }
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表