cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1905|回复: 2

请斑竹指教一个问题!!!

[复制链接]
发表于 2005-3-25 18:45:43 | 显示全部楼层 |阅读模式
<>#include &lt;reg51.h&gt;
#include &lt;intrins.h&gt; </P>
<>#define SDA P27   
#define SCL P26     
#define uchar unsigned char
sbit RS=P0^7;
sbit RW=P0^6;
sbit E=P0^5;
sbit P26 = P2^6;        //file://x1226
sbit P27 = P2^7;
sbit rst = P2^1;
void write1(void);
void write2(void);
void Wait(void);
void writeByte(uchar ucDa);
uchar readByte(void);
void write1302(uchar addr,uchar ucDa);
uchar  read1302 (uchar addr);
void set(uchar *pSecDa);
void get1302(uchar ucCurtime[]);
void analyze(void);
uchar temp;
uchar a,b;</P>
<>
void Wait(){
uchar i;
for(i=0;i&lt;10;i++){ _nop_();}
}</P>
<P>void writeByte(uchar ucDa)  //file://送一字节数据到slave,并返回确认信号
{
  uchar i;
ACC=ucDa;
  for(i=0;i&lt;8;i++)
  {
    if(ACC &amp; 0x80)
      SDA = 1;
    else
      SDA = 0;</P>
<P>    ACC &lt;&lt;= 1;
    Wait();</P>
<P>    SCL = 1;
    Wait();
    SCL = 0;
    Wait();
  }
}</P>
<P>uchar readByte(void)  //file://接收1字节数据
{
  uchar i;
  uchar ACC = 0;</P>
<P>  for(i=0;i&lt;8;i++)
  {
    SCL = 1;
    Wait();</P>
<P>    ACC &lt;&lt;= 1;</P>
<P>    if(SDA)
    {
      ACC |= 0x01;
    }
    SCL = 0;
    Wait();
  }</P>
<P>  return (ACC);
}</P>
<P>void write1302(uchar addr,uchar ucDa){
rst=0;
SCL=0;
rst=1;
writeByte(addr);
writeByte(ucDa);
SCL=1;
rst=0;}</P>
<P> uchar  read1302 (uchar addr)
{
    uchar ucDa;
    rst=0;
    SCL=0;
    rst=1;
    writeByte(addr);      /* 地址,命令 */
    ucDa = readByte();   /* 读1Byte数据 */
   SCL=1;
   rst=0;
    return(ucDa);
}</P>
<P> void set(uchar *pSecDa){
uchar i;
uchar addr=0x80;
write1302(0x8e,0x00);
for(i=7;i&gt;0;i--){
  write1302(addr,*pSecDa);
  pSecDa++;
  addr+=2;}
  write1302(0x8e,0x80);
  }</P>
<P>void get1302(uchar ucCurtime[])      
{
    uchar  i;
    uchar  addr = 0x81;
    for (i=0;i&lt;7;i++)
    {
         ucCurtime<i> = read1302(addr);/*格式为: 秒 分 时 日 月 星期 年 */
         addr += 2;
    }
}
void analyze(void){   //十位的数的话要分两次在LCD上显示,分别是十位和各个位
a=temp&gt;&gt;4;
b=temp&amp;0x0f;}</P>
<P>  void main(){
uchar code tab1[]={0x01,0x38,0x0f,0x06} ;      /*01清除屏幕;38设置8位2行; 0f显示屏幕ON,光标ON,闪烁ON;06加一*/
uchar wtime[7]={0x31,0x31,0x31,0x31,0x31,0x31,0x33};
//{0x30,0x43,0x11,0x20,0x06,0x05,0x03};
uchar rtime[7];
uchar i;
  set(wtime);
  Wait();
   
    for(i=0;i&lt;4;i++)
      { P1=tab1<i>; write1()  ;  }          /* 设置初始状态  */
   P1=0x80;  write1()  ;                    /*第一行起始地址*/
  while(1){
  get1302(rtime);
  Wait();
    for(i=0;i&lt;7;i++)
     { temp=rtime<i>;
     analyze();
   P1=a; write2()  ;
   P1=b; write2()  ;}             /* 输出第一行*/</P>
<P>   P1=0x80;  write1()  ; }                   /* 光标位置*/
  
}
void write1(void)                           /*RS 为0
发表于 2005-3-26 07:52:32 | 显示全部楼层
先和仿真器调试,看看你读回来的对不对,好像感觉1302不好用,不如用1307或PCF8563好用多了!用仿真器看看读回来的数据对不对先,不要直接这样子弄,不太好调试的!
 楼主| 发表于 2005-3-26 17:53:53 | 显示全部楼层
<>好的,谢谢!我再去检查检查, 以后还得请斑竹多多指教啊.</P>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-5-3 22:45 , Processed in 0.682130 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表