DS1302 51 单片机 显示乱码 求助,下面附程序代码

/* DS1302 备用电池时钟 用数码管显示

CLK 时钟 端口 【P1.1】
I/O 数据 端口 【P1.2】
RST 控制 端口 【P1.3】

位 锁存端口 【P2.0】
段 锁存端口 【P2.1】

数码管数据口 【 P0 】

*/
#include<reg52.h>
#define uchar unsigned char //定义变量类型
#define uint unsigned int //定义变量类型

sbit sclk=P1^1; //定义 时钟 端口
sbit io=P1^2; //定义 数据 端口
sbit rst=P1^3; //定义 控制 端口

sbit du=P2^1; //定义锁存使能端口 段锁存
sbit we=P2^0; //定义锁存使能端口 位锁存

//存储显示值的全局变量
uchar code twe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code tdu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar ss;
uchar sec[9];

void delay(uchar z) //ms级延时
{
uchar x; uint y;
for(x=z;x>0;x--)
for(y=1247;y>0;y--);
}

void xs(uchar a,uchar b) //数码管显示函数
{
uchar c,d;
for(c=0;c<b;c++)
{
P0=twe[a+c];
we=1;
we=0;
P0=sec[c];
du=1;
du=0;
d=30;
while(d--);
}
}
/*显示乱码 请高手指导一下下,在下感激不尽,代码不全,内容太多被百度限制了,回复后我再上传剩下的,*/

参考一下这个仿真实例

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-16
void write(uchar com,uchar date) //写1302控制字,和数据
{
uchar i;
rst=0;
sclk=0;
rst=1;
for(i=0;i<8;i++) //写控制字
{
io=(bit)(com&0x01);
sclk=1;
sclk=0;
com>>=1;
}
for(i=0;i<8;i++) //写数据
{
io=(bit)(date&0x01);
sclk=1;
sclk=0;
date>>=1;
}
rst=1;
}

uchar read(uchar com) //从1302读取的数据
{
uchar i,dat,date;
rst=0;
sclk=0;
rst=1;
for(i=0;i<8;i++) //写控制字
{
io=(bit)(com&0x01);
sclk=1;
sclk=0;
com>>=1;
}
for(i=0;i<8;i++) //读取数据
{
dat=io;
sclk=1;
sclk=0;
dat<<=i;
date|=dat;

}
io=0;
return date;
}

void init() //将1302初始化
{
write(0x8e,0x00); //关闭写保护
write(0x80,0x00); //将 00秒写入1302
write(0x82,0x00); //将 00分写入1302
write(0x84,0x81); //将 01小时写入1302
write(0x8e,0x80); //将1302写保护打开
}

void main()
{ // 主函数,我只读取了秒钟
init();
delay(10);
while(1)
{
ss=read(0x81); //读取秒
sec[0]=tdu[ss/16]; //求出秒 十位数上的值
sec[1]=tdu[ss%16]; //求出秒 个位数上的值
xs(0,2); //数码管显示 秒 值 ,但结果不对 ,
}
}

/*这是剩下的全部,请高手调试一下*/本回答被网友采纳
第2个回答  2013-06-16
我也才学完....主函数传出来看看呢....

DS1302与51单片机的问题,大家来帮我看看这个程序吧...不知道哪儿出错了...
void Write1302(uchar addr,dat){ uchar counter,temp;RET=0;SCLK=0;RET=1;for(counter=8;counter>0;counter--)\/\/发送地址 { SCLK=0;temp=addr;DIO=(bit)(temp&0x01);addr>>=1;SCLK=1;} for(counter=8;counter>0;counter--)\/\/发送数据 { SCLK=0;temp=dat;DIO=(bit)(temp&0x01)...

个人用C51写的时钟芯片DS1302程序代码,开始上电就是无法正常显示读取时 ...
void main(void){ uchar i; for(i=0;i<100;i++){ delay(250); } SetDS1302(); while(1) { Read_RTC(); ECHO(8,disp); }}

我用DS1302+LCD1602+单片机制作的的电子钟,可以显示,但是时间不会走,而...
\/*** DS1302 ***\/ \/\/设置1302的初始时间 void Init_1302(void){\/\/(2008年9月11日23时59分35秒星期四)*\/ write_clock(0x8e,0x00);\/\/允许写操作 write_clock(0x8c,0x08);\/\/08年 write_clock(0x8a,0x04);\/\/星期 write_clock(0x88,0x09);\/\/月 write_clock(0x86,0x11);\/\/日...

...ds1302的使用。下面有电路图,以及问题和程序代码
从你的图上,看不到LED灯接到那个管脚。因此还无法准确判断。但似乎接在P1.6上,否则你没必要在程序中操作P1.6。P0一般在程序中定义为单片机端口,所以你的程序中 P0 = check_RTC();是不合适的。主程序应该这样写:void main(void){ unsigned i;i = check_RTC();if(i)P1 &= ~(1 <...

DS1302 液晶1602 单片机stc89C52 做出来的时钟,显示乱码该怎么办啊,求...
从你这个屏显的效果来看,字库和LCD驱动应该都是没问题的,你检查下仿真的器件型号是不是相同的,需要注意的是这个时钟的代码是使用的RTC还是外部晶振,然后这个晶振的频率和你仿真时是否一致。

51单片机完整项目代码无法运行
根据你的错误警告,还有程序发现你的工程最好建立在 Main。c那个文件的同一个文件夹, 然后把里面的.c文件全部加进去,,编译就可以了,我刚才吧你的文件下载,然后按照上面说的做了一遍, 是可以进行编译的,一个警告都没有

基于单片机51系列及DS1302时钟芯片数字电子钟的制作。求电路总原理图...
这是1602电路,和时钟电路。元件基本差不多。电路如图 include <intrins.h> define uchar unsigned char define uint unsigned int sbit ds1302_RST =P2^0;sbit ds1302_IO =P2^1;sbit ds1302_SCLK=P2^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit A1=P3^0;sbit A2=P3^1;sbit A3=P3^2;...

...单片机编程错误C242和C187的问题!!这是一个DS1302和12864LCD可调式中...
朋友,你看一下你的数组有没有定义错误。数组名前面有没有加code呀,还有就是你的keil有没有破解呀,没有破解的keil编写的程序大小受限。需要先破解keil。

求求你们,帮我看看,51单片机DS1302仿真没问题,实物不走了。
检查以下几点,问题可能在其中:1:检查4脚引出导线时,没有将其从原来供电的电源上断开,应该连在一起 2:换一个新的32.768K晶振

【51单片机系列】DS1302时钟模块
3. SPI接口SPI接口用于DS1302与单片机之间的高效通信,支持全双工操作,传输速度可高达几Mbps。三、应用实例例如,通过将DS1302的控制引脚接入单片机的特定端口,配合32.768kHz晶振,能实现数码管上显示实时时间的功能。示例代码主程序中包含初始化、设置时间和读取时间的代码,最后将数据显示在数码管上。通过...

相似回答