|
在進(jìn)行LCD1602顯示秒變化時,發(fā)現(xiàn)按規(guī)律不顯示10、21、32.... 找不到原因,各位大佬能否幫忙解決
主程序:
#include <REGX52.H>
#include "LCD1602.H"
#include "DS1302.h"
#include "Delay.h"
unsigned char second;
void main()
{
DS1302_Init();
LCD_Init();
DS1302_Write(0x8e,0x00); //如果讀出時間為一個大于59并且不動的數(shù),芯片可能處于寫保護(hù)狀態(tài),關(guān)閉保護(hù)
LCD_ShowString(1,1,"RRR");
DS1302_Write(0x80,0x07);
while(1)
{
second = DS1302_Read(0x81);
LCD_ShowNum(2,1,second/16*10+second%16,3); //16進(jìn)制轉(zhuǎn)BCD碼
Delay(1000);
}
}
DS1302模塊化程序:
#include <REGX52.H>
sbit DS1302_SCLK = P3^6;
sbit DS1302_IO = P3^4;
sbit DS1302_CE = P3^5;
void DS1302_Init(void)
{
DS1302_CE = 0;
DS1302_SCLK = 0;
}
void DS1302_Write(unsigned char Command,Data) //command命令如秒、分..
{
unsigned char i;
DS1302_CE = 1;
for(i=0;i<8;i++)
{
DS1302_IO = Command&(0x01<<i);
DS1302_SCLK = 1;
DS1302_SCLK = 0; //需要考慮時間是否允許
}
for(i=0;i<8;i++)
{
DS1302_IO = Data&(0x01<<i);
DS1302_SCLK = 1;
DS1302_SCLK = 0;
}
DS1302_CE = 0;
}
unsigned char DS1302_Read(unsigned char Command) //讀出數(shù)據(jù)即顯示寫入的數(shù)據(jù)所以有返回值
{
unsigned char i,Data = 0x00; //局部變量初值不確定
DS1302_CE = 1;
for(i=0;i<8;i++)
{
DS1302_IO = Command&(0x01<<i);
DS1302_SCLK = 0;
DS1302_SCLK = 1; //先置0再置1保證時序準(zhǔn)確
}
for(i=0;i<8;i++)
{
DS1302_SCLK = 1;
DS1302_SCLK = 0;
if(DS1302_IO) //隨著時序的運(yùn)行 DS1302以及把想要輸出的第0位給到IO輸出口的這條線上
{Data |= (0x01<<i);}
}
DS1302_CE = 0;
DS1302_IO = 0;
return Data;
}
|
|