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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3472|回復(fù): 4
收起左側(cè)

用ds1302編程時(shí)出現(xiàn)的問題

[復(fù)制鏈接]
ID:643131 發(fā)表于 2019-12-7 12:09 | 顯示全部樓層 |閱讀模式
#include "stc15.h"
#include "ds1302.h"
#include <intrins.h>

u8 shi,fen,miao,a[];  //全局變量
bit time_flag;

u8 code table[] =
                        {   //共陽極編碼表
                                        0xc0,0xf9,0xa4,0xb0,
                                        //0,        1,          2,         3
                                        0x99,0x92,0x82,0xf8,
                                        //4,        5,          6,         7
                                        0x80,0x90,0xff,0xbf
                                        //8,        9,                空,-,
                        };
                       
u8 code order[] =
                        {   //數(shù)碼管位碼
                                        0x01,0x02,0x04,0x08,
                                        0x10,0x20,0x40,0x80
                        };

void Delay2ms()                //@11.0592MHz 2ms延時(shí)
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 22;
        j = 128;
        do
        {
                while (--j);
        } while (--i);
}

void Refresh_time()            //數(shù)碼管顯示時(shí)間
{
                if(time_flag == 1)
                {
                        time_flag = 0;
                  shi = DS1302_Read(0x85);  
                  fen  = DS1302_Read(0x83);
                  miao = DS1302_Read(0x81);
                }
                a[0] = shi/16;
                a[1] = shi%16;
                a[2] = 11;
                a[3] = fen/16;
                a[4] = fen%16;
                a[5] = 11;
                a[6] = miao/16;
                a[7] = miao%16;
}

void num_display()        //數(shù)碼管顯示
{
          static u8 i=0;
                P0 = 0x00;
                P2 = (P2 & 0x1f) | 0xc0;
                P2 = (P2 & 0x1f);          
                P0 = table[a[i]];
                P2 = (P2 & 0x1f) | 0xe0;  
                P2 = (P2 & 0x1f);
                P0 = order[i];
                P2 = (P2 & 0x1f) | 0xc0;
                P2 = (P2 & 0x1f);
                i++;
                i &= 0x07;
                Delay2ms();
}

void Timer0Init(void)                //2毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TL0 = 0x9A;                  //設(shè)置定時(shí)初值
        TH0 = 0xA9;                  //設(shè)置定時(shí)初值
        TF0 = 0;                    //清除TF0標(biāo)志
        TR0 = 1;
        ET0 = 1;
  EA = 1;               //定時(shí)器0開始計(jì)時(shí)
}

void T0_time() interrupt 1
{
                static u8 time_count = 0;          
    num_display();
                if(++time_count >= 200)
                {
                        time_count  = 0;
                        time_flag = 1;
                }
}

void main()
{
        Timer0Init();
        DS1302_Init(12,00,00);
        while(1)
        {
                 Refresh_time();
                 num_display();
        }
}

/

/************ ds1302.c **************/

#include "stc15.h"
#include "ds1302.h"

sbit SCK = P1^7;      //時(shí)鐘芯片引腳
sbit RST = P1^3;
sbit SDA = P2^3;

void DS1302_Write_Byte(u8 dat)   //單字節(jié)寫入一字節(jié)數(shù)據(jù)
{
        u8 i;
        SCK_CLR;           //SCLK管腳置低,初始化DS1302
        for(i = 0;i < 8;i++)
        {
                if(dat & 0x01)   
                {
                        SCK_SET;       //I/O口置高電平
                }
                else
                {
                        SCK_CLR;       //I/O口置低電平
                }
                SCK_SET;         //SCLK上升沿,讀取數(shù)據(jù)
                SCK_CLR;         //拉低SCLK,傳輸下一位數(shù)據(jù)
                dat = dat >> 1;
        }
}

void DS1302_Write(u8 addr,u8 dat)   //向 DS1302 單字節(jié)寫入一字節(jié)數(shù)據(jù)
{
        RST_CLR;                                      //RST管腳置低,初始化DS1302
        SCK_CLR;                                             //SCLK管腳置低,初始化DS1302
        RST_SET;                                             //啟動(dòng)DS1302總線,RST置高電平
        addr &= 0xfe;                                                     //最低位置零,保證穩(wěn)定環(huán)境
        DS1302_Write_Byte(addr);           //寫入目標(biāo)地址
        DS1302_Write_Byte(dat);            //寫入數(shù)據(jù)
        RST_CLR;                                                                                 //停止DS1302總線
        SCK_CLR;            
}

unsigned char DS1302_Read_Byte(void)                        //單字節(jié)讀一字節(jié)數(shù)據(jù)
{
        u8 i,dat =  0;
        for(i = 0;i < 8;i++)
        {
                dat = dat >> 1;
                if(SDA = 1)              
                {
                        dat |= 0x80;        
                }
                else
                {
                        dat &= 0x7f;
                }
                SCK_SET;                   //SCLK下降沿,鎖存數(shù)據(jù)
                SCK_CLR;       
        }
        return dat;
}

unsigned char DS1302_Read(u8 addr)              //從 DS1302 單字節(jié)讀出一字節(jié)數(shù)據(jù)
{
        u8 temp;
        RST_CLR;
        SCK_CLR;
        RST_SET;
        addr |= 0x01;               //最低位置高,保證是讀操作
        DS1302_Write_Byte(addr);
  temp = DS1302_Read_Byte();        //從 DS1302 單字節(jié)讀出一字節(jié)數(shù)據(jù)
        RST_CLR;
        SDA_CLR;
        return temp;
}

void DS1302_Init(u8 shi,u8 fen,u8 miao)          //時(shí)鐘初始化
{
                DS1302_Write(0x8e,0x00);                     //關(guān)閉寫保護(hù)
                DS1302_Write(0x80,((miao/10)<<4)|(miao%10)); //分別寫秒分時(shí)地址
                DS1302_Write(0x82,((fen/10)<<4)|(fen%10));
                DS1302_Write(0x84,((shi/10)<<4)|(shi%10));
                DS1302_Write(0x8e,0x80);                     //開啟寫保護(hù)
}

/********** ds1302.h **********/

#ifndef _DS1302_H
#define _DS1302_H

typedef unsigned char u8;
typedef unsigned int u16;

#define SCK_CLR SCK = 0;
#define SCK_SET SCK = 1;
#define RST_CLR RST = 0;
#define RST_SET RST = 1;
#define SDA_CLR SDA = 0;
#define SDA_SET SDA = 1;


extern void DS1302_Write_Byte(u8 dat);
extern void DS1302_Write(u8 addr,u8 dat);
extern unsigned char DS1302_Read_Byte(void);
extern unsigned char DS1302_Read(u8 addr);       
extern void DS1302_Init(u8 shi,u8 fen,u8 miao);

#endif

用ds1302芯片在數(shù)碼管上顯示時(shí)間,編譯時(shí)有十個(gè)警告,下到單片機(jī)里現(xiàn)象也不對(duì),哪位大神幫忙看看為啥有警告

2019-12-07_120016.png
2019-12-07_120033.png
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2019-12-8 09:58 | 顯示全部樓層
u8 shi,fen,miao,a[];  //全局變量
改成:
u8 shi,fen,miao;  //全局變量
u8 a[8];
回復(fù)

使用道具 舉報(bào)

ID:647528 發(fā)表于 2019-12-8 12:42 | 顯示全部樓層
51頭文件可能有問題,換reg51試一下
回復(fù)

使用道具 舉報(bào)

ID:643131 發(fā)表于 2019-12-12 13:06 | 顯示全部樓層
xuyaqi 發(fā)表于 2019-12-8 09:58
u8 shi,fen,miao,a[];  //全局變量
改成:
u8 shi,fen,miao;  //全局變量

好的,謝謝了
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-12-12 15:59 | 顯示全部樓層
給你把文件合并在一起,能通過編譯,文件中有兩處錯(cuò)誤。
錯(cuò)誤u8 shi,fen,miao,a[];  //全局變量
正確u8 shi,fen,miao,a[8];  //全局變量
錯(cuò)誤if(SDA = 1)
正確if(SDA == 1)

  1. #include "stc15.h"
  2. #include <intrins.h>
  3. typedef unsigned char u8;
  4. typedef unsigned int u16;

  5. #define SCK_CLR SCK = 0;
  6. #define SCK_SET SCK = 1;
  7. #define RST_CLR RST = 0;
  8. #define RST_SET RST = 1;
  9. #define SDA_CLR SDA = 0;
  10. #define SDA_SET SDA = 1;
  11. void Timer0Init(void);
  12. void num_display();
  13. void Refresh_time();
  14. void Delay2ms();
  15. void DS1302_Write_Byte(u8 dat);
  16. void DS1302_Write(u8 addr,u8 dat);
  17. unsigned char DS1302_Read_Byte(void);
  18. unsigned char DS1302_Read(u8 addr);        
  19. void DS1302_Init(u8 shi,u8 fen,u8 miao);

  20. sbit SCK = P1^7;      //時(shí)鐘芯片引腳
  21. sbit RST = P1^3;
  22. sbit SDA = P2^3;
  23. u8 shi,fen,miao,a[8];  //全局變量
  24. bit time_flag;

  25. u8 code table[] =
  26. {   //共陽極編碼表
  27. 0xc0,0xf9,0xa4,0xb0,
  28. //0,        1,          2,         3
  29. 0x99,0x92,0x82,0xf8,
  30. //4,        5,          6,         7
  31. 0x80,0x90,0xff,0xbf
  32. //8,        9,                空,-,
  33. };

  34. u8 code order[] =
  35. {   //數(shù)碼管位碼
  36. 0x01,0x02,0x04,0x08,
  37. 0x10,0x20,0x40,0x80
  38. };

  39. void Delay2ms()                //@11.0592MHz 2ms延時(shí)
  40. {
  41.         unsigned char i, j;
  42.         _nop_();
  43.         _nop_();
  44.         i = 22;
  45.         j = 128;
  46.         do
  47.         {
  48.         while (--j);
  49.         } while (--i);
  50. }

  51. void Refresh_time()            //數(shù)碼管顯示時(shí)間
  52. {
  53.         if(time_flag == 1)
  54.         {
  55.                 time_flag = 0;
  56.                 shi = DS1302_Read(0x85);  
  57.                 fen  = DS1302_Read(0x83);
  58.                 miao = DS1302_Read(0x81);
  59.         }
  60.         a[0] = shi/16;
  61.         a[1] = shi%16;
  62.         a[2] = 11;
  63.         a[3] = fen/16;
  64.         a[4] = fen%16;
  65.         a[5] = 11;
  66.         a[6] = miao/16;
  67.         a[7] = miao%16;
  68. }

  69. void num_display()        //數(shù)碼管顯示
  70. {
  71.         static u8 i=0;
  72.         P0 = 0x00;
  73.         P2 = (P2 & 0x1f) | 0xc0;
  74.         P2 = (P2 & 0x1f);         
  75.         P0 = table[a[i]];
  76.         P2 = (P2 & 0x1f) | 0xe0;  
  77.         P2 = (P2 & 0x1f);
  78.         P0 = order[i];
  79.         P2 = (P2 & 0x1f) | 0xc0;
  80.         P2 = (P2 & 0x1f);
  81.         i++;
  82.         i &= 0x07;
  83.         Delay2ms();
  84. }

  85. void Timer0Init(void)                //2毫秒@11.0592MHz
  86. {
  87.         AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
  88.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  89.         TL0 = 0x9A;                  //設(shè)置定時(shí)初值
  90.         TH0 = 0xA9;                  //設(shè)置定時(shí)初值
  91.         TF0 = 0;                    //清除TF0標(biāo)志
  92.         TR0 = 1;
  93.         ET0 = 1;
  94.         EA = 1;               //定時(shí)器0開始計(jì)時(shí)
  95. }

  96. void main()
  97. {
  98.         Timer0Init();
  99.         DS1302_Init(12,00,00);
  100.         while(1)
  101.         {
  102.                 Refresh_time();
  103.                 num_display();
  104.         }
  105. }

  106. void T0_time() interrupt 1
  107. {
  108.         static u8 time_count = 0;         
  109.         num_display();
  110.         if(++time_count >= 200)
  111.         {
  112.                 time_count  = 0;
  113.                 time_flag = 1;
  114.         }
  115. }

  116. void DS1302_Write_Byte(u8 dat)   //單字節(jié)寫入一字節(jié)數(shù)據(jù)
  117. {
  118.         u8 i;
  119.         SCK_CLR;           //SCLK管腳置低,初始化DS1302
  120.         for(i = 0;i < 8;i++)
  121.         {
  122.                 if(dat & 0x01)   
  123.                 {
  124.                         SCK_SET;       //I/O口置高電平
  125.                 }
  126.                 else
  127.                 {
  128.                         SCK_CLR;       //I/O口置低電平
  129.                 }
  130.                 SCK_SET;         //SCLK上升沿,讀取數(shù)據(jù)
  131.                 SCK_CLR;         //拉低SCLK,傳輸下一位數(shù)據(jù)
  132.                 dat = dat >> 1;
  133.         }
  134. }

  135. void DS1302_Write(u8 addr,u8 dat)   //向 DS1302 單字節(jié)寫入一字節(jié)數(shù)據(jù)
  136. {
  137.         RST_CLR;                                      //RST管腳置低,初始化DS1302
  138.         SCK_CLR;                                             //SCLK管腳置低,初始化DS1302
  139.         RST_SET;                                             //啟動(dòng)DS1302總線,RST置高電平
  140.         addr &= 0xfe;                                                     //最低位置零,保證穩(wěn)定環(huán)境
  141.         DS1302_Write_Byte(addr);           //寫入目標(biāo)地址
  142.         DS1302_Write_Byte(dat);            //寫入數(shù)據(jù)
  143.         RST_CLR;                           //停止DS1302總線
  144.         SCK_CLR;            
  145. }

  146. unsigned char DS1302_Read_Byte(void)//單字節(jié)讀一字節(jié)數(shù)據(jù)
  147. {
  148.         u8 i,dat =  0;
  149.         for(i = 0;i < 8;i++)
  150.         {
  151.                 dat = dat >> 1;
  152.                 if(SDA == 1)              
  153.                 {
  154.                         dat |= 0x80;        
  155.                 }
  156.                 else
  157.                 {
  158.                         dat &= 0x7f;
  159.                 }
  160.                 SCK_SET;                   //SCLK下降沿,鎖存數(shù)據(jù)
  161.                 SCK_CLR;        
  162.         }
  163.         return dat;
  164. }

  165. unsigned char DS1302_Read(u8 addr)              //從 DS1302 單字節(jié)讀出一字節(jié)數(shù)據(jù)
  166. {
  167.         u8 temp;
  168.         RST_CLR;
  169.         SCK_CLR;
  170.         RST_SET;
  171.         addr |= 0x01;               //最低位置高,保證是讀操作
  172.         DS1302_Write_Byte(addr);
  173.         temp = DS1302_Read_Byte();        //從 DS1302 單字節(jié)讀出一字節(jié)數(shù)據(jù)
  174.         RST_CLR;
  175.         SDA_CLR;
  176.         return temp;
  177. }

  178. void DS1302_Init(u8 shi,u8 fen,u8 miao)          //時(shí)鐘初始化
  179. {
  180.         DS1302_Write(0x8e,0x00);                     //關(guān)閉寫保護(hù)
  181.         DS1302_Write(0x80,((miao/10)<<4)|(miao%10)); //分別寫秒分時(shí)地址
  182.         DS1302_Write(0x82,((fen/10)<<4)|(fen%10));
  183.         DS1302_Write(0x84,((shi/10)<<4)|(shi%10));
  184.         DS1302_Write(0x8e,0x80);                     //開啟寫保護(hù)
  185. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人av观看 | 国产91精品久久久久久久网曝门 | 亚洲精品久久久久久宅男 | 日韩欧美二区 | 色资源站| 亚洲激情av | 国产精品高潮呻吟久久 | 日本视频在线播放 | 草草视频在线观看 | 欧美精品一 | 中文字幕一区二区三区乱码在线 | 91成人免费观看 | 日韩第一区 | 亚洲黄色片免费观看 | 久久99深爱久久99精品 | 免费精品视频一区 | 91亚洲国产精品 | 国产精品日韩欧美一区二区三区 | 欧美一级欧美一级在线播放 | 久久亚洲一区二区 | 中文字幕一区二区三区精彩视频 | 免费的av网站 | 国产欧美日韩一区二区三区在线 | 天天草天天干 | 日韩欧美在线一区二区 | 国产成人99久久亚洲综合精品 | 免费黄色片在线观看 | 日韩av.com | 亚洲一区 | 欧美伊人久久久久久久久影院 | 精品久 | 久久久久久久综合 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 国产乱码久久久久久一区二区 | 国产一区免费 | 欧美精品一区二区三区四区 在线 | 欧美日韩国产免费 | 欧美激情99| 国产日韩视频在线 | 久草在线高清 | 亚洲精品视频一区 |