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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)+4個74HC595靜態(tài)顯示時間段位,12V共陽數(shù)碼管,第一個595發(fā)燙,時間不更新

[復(fù)制鏈接]
ID:883770 發(fā)表于 2021-3-29 21:39 | 顯示全部樓層 |閱讀模式
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
//DS1302引腳定義,可根據(jù)實際情況自行修改端口定義
sbit RST=P3^2;
sbit IO=P3^0;
sbit SCK=P3^1;
sbit ser=P1^7;
sbit clk=P1^6;
sbit rck=P1^5;
sbit flash=P3^5;
uchar dat;
//DS1302地址定義
#define ds1302_sec_add                        0x80                //秒數(shù)據(jù)地址
#define ds1302_min_add                        0x82                //分?jǐn)?shù)據(jù)地址
#define ds1302_hr_add                        0x84                //時數(shù)據(jù)地址
#define ds1302_date_add                        0x86                //日數(shù)據(jù)地址
#define ds1302_month_add                0x88                //月數(shù)據(jù)地址
#define ds1302_day_add                        0x8a                //星期數(shù)據(jù)地址
#define ds1302_year_add                        0x8c                //年數(shù)據(jù)地址
#define ds1302_control_add                0x8e                //控制數(shù)據(jù)地址
#define ds1302_charger_add                0x90                                          
#define ds1302_clkburst_add                0xbe
//初始時間定義
uchar code seg_table[]= {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
                            0x80, 0x90}; //0-9段碼
uchar time_buf[8] = {0x20,0x21,0x03,0x29,0x19,0x54,0x00,0x05};//初始時間
uchar readtime[14];//當(dāng)前時間
uchar sec_buf=0;  //秒緩存
uchar sec_flag=0; //秒標(biāo)志位
//功能:延時1毫秒
//入口參數(shù):x
//出口參數(shù):無
//說明:晶振為12M
void Init_Timer(void)
{
TMOD |= 0x11;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
TH0=0x3c;              //給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出
TL0=0xb0;
TH0=0x15;              //給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出
TL0=0xa0;
EA=1;            //總中斷打開
ET0=1;           //定時器中斷打開
TR0=1;           //定時器開關(guān)打開
ET1=1;           //定時器中斷打開
TR1=1;
}
void delay_xms(uint x)
{
  uint i,j;
  for(i=0;i<x;i++)
    for(j=0;j<112;j++);
}
//DS1302初始化函數(shù)
void ds1302_init(void)
{
        RST=0;                        //RST腳置低
        SCK=0;                        //SCK腳置低
}
//向DS1302寫入一字節(jié)數(shù)據(jù)
void ds1302_write_byte(uchar addr, uchar d)
{
        uchar i;
        RST=1;                                        //啟動DS1302總線        
        //寫入目標(biāo)地址:addr
        addr = addr & 0xFE;   //最低位置零,寄存器0位為0時寫,為1時讀
        for (i = 0; i < 8; i ++) {
                if (addr & 0x01) {
                        IO=1;
                        }
                else {
                        IO=0;
                        }
                SCK=1;      //產(chǎn)生時鐘
                SCK=0;
                addr = addr >> 1;
                }        
        //寫入數(shù)據(jù):d
        for (i = 0; i < 8; i ++) {
                if (d & 0x01) {
                        IO=1;
                        }
                else {
                        IO=0;
                        }
                SCK=1;    //產(chǎn)生時鐘
                SCK=0;
                d = d >> 1;
                }
        RST=0;                //停止DS1302總線
}

//從DS1302讀出一字節(jié)數(shù)據(jù)
uchar ds1302_read_byte(uchar addr) {

        uchar i,temp;        
        RST=1;                                        //啟動DS1302總線
        //寫入目標(biāo)地址:addr
        addr = addr | 0x01;    //最低位置高,寄存器0位為0時寫,為1時讀
        for (i = 0; i < 8; i ++) {
                if (addr & 0x01) {
                        IO=1;
                        }
                else {
                        IO=0;
                        }
                SCK=1;
                SCK=0;
                addr = addr >> 1;
                }        
        //輸出數(shù)據(jù):temp
        for (i = 0; i < 8; i ++) {
                temp = temp >> 1;
                if (IO) {
                        temp |= 0x80;          //   高位置1
                        }
                else {
                        temp &= 0x7F;        //高位置0
                        }
                SCK=1;
                SCK=0;
                }        
        RST=0;                                        //停止DS1302總線
        return temp;
}
//向DS302寫入時鐘數(shù)據(jù)
void ds1302_write_time(void)
{
        ds1302_write_byte(ds1302_control_add,0x00);                        //關(guān)閉寫保護(hù)
        ds1302_write_byte(ds1302_sec_add,0x80);                                //暫停時鐘 ,晶振停振
        ds1302_write_byte(ds1302_charger_add,0x00);            //涓流充電
        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_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);                        //打開寫保護(hù)
}
//從DS302讀出時鐘數(shù)據(jù)
void ds1302_read_time(void)  
{
//        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;//秒,屏蔽秒的第7位,避免超出59
//        time_buf[7]=ds1302_read_byte(ds1302_day_add);                //周         
}
void serial_input_595(uchar d)//串口發(fā)送8位數(shù)據(jù),高字節(jié)在前
{uchar i;
   for(i=0;i<8;i++)
   {d<<=1;ser=CY;
   clk=0;_nop_();_nop_();
   clk=1;_nop_();_nop_(); }         //上升沿時鐘
   }
void parallel_output_595()        //并口顯示
{ rck=0;_nop_();_nop_();
   rck=1;_nop_();_nop_(); //上升沿鎖存
}
//主函數(shù)
void main(void)
{
delay_xms(50);
ds1302_init(); //DS1302初始化
delay_xms(50);
ds1302_write_time(); //寫入初始值
  Init_Timer();
while(1)//
  {EA=0;
    ds1302_read_time();  //讀取時間
// readtime[0]=(time_buf[0]>>4);   //分離出年千位
// readtime[1]=(time_buf[0]&0x0F); //分離出年百位
//  readtime[2]=(time_buf[1]>>4);   //分離出年十位
// readtime[3]=(time_buf[1]&0x0F); //分離出年個位
//  readtime[4]=(time_buf[2]>>4);   //分離出月十位
//  readtime[5]=(time_buf[2]&0x0F); //分離出月個位
// readtime[6]=(time_buf[3]>>4);   //分離出日十位
  //readtime[7]=(time_buf[3]&0x0F); //分離出日個位
  readtime[8]=(time_buf[4]>>4);   //分離出小時十位
  readtime[9]=(time_buf[4]&0x0F); //分離出小時個位
  readtime[10]=(time_buf[5]>>4);   //分離出分鐘十位
  readtime[11]=(time_buf[5]&0x0F); //分離出分鐘個位
readtime[12]=(time_buf[6]>>4);   //分離出秒鐘十位
  readtime[13]=(time_buf[6]&0x0F); //分離出秒鐘個位
  EA=1;  
dat=seg_table[readtime[8]];//小時十位
  serial_input_595(dat);
  dat=seg_table[readtime[9]]; //小時個位
  serial_input_595(dat);
  dat=seg_table[readtime[10]];//分十位
   serial_input_595(dat);
   dat=seg_table[readtime[11]];//分個位
   serial_input_595(dat);
   parallel_output_595();
   delay_xms(500);
  } }
void Timer0_isr(void) interrupt 1//中斷子程序每半秒時鐘點閃爍
{
uchar i;
TH0=0x3c;                  
TL0=0xb0;
if (i!=10)
{i++;}
else
{flash=~flash;
i=0;}
}        
回復(fù)

使用道具 舉報

ID:328014 發(fā)表于 2021-3-29 21:58 | 顯示全部樓層
發(fā)燙與程序無關(guān),是你電路的問題,程序不會導(dǎo)致74hc595發(fā)燙
回復(fù)

使用道具 舉報

ID:898290 發(fā)表于 2021-3-29 22:12 | 顯示全部樓層
仔細(xì)檢查一下電路板,拿萬用表檢查一下短路,也有可能芯片損毀,換一個試試,與程序沒有關(guān)系
回復(fù)

使用道具 舉報

ID:230742 發(fā)表于 2021-3-29 23:32 | 顯示全部樓層
4個595都是一樣的,換個位置試一試。就知道了。大部分都是焊錯了。
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2021-3-30 07:55 | 顯示全部樓層
74HC595 不能推動12V的數(shù)碼管
你可以用  TPIC6C596 8位移位寄存器 7segment displays 7段數(shù)碼管

http://www.ti.com/lit/ds/slis093d/slis093d.pdf




回復(fù)

使用道具 舉報

ID:46065 發(fā)表于 2021-3-30 09:59 | 顯示全部樓層
我曾經(jīng)買到過一批質(zhì)量很差的595
回復(fù)

使用道具 舉報

ID:372579 發(fā)表于 2021-3-30 10:14 來自手機(jī) | 顯示全部樓層
仔細(xì)檢查電路一般情況下就是電路焊錯導(dǎo)致的
回復(fù)

使用道具 舉報

ID:47541 發(fā)表于 2021-3-30 13:30 | 顯示全部樓層
12V共陽數(shù)碼管,數(shù)碼管為啥12V 595 工作電壓不是5V嗎? 共陽極的電壓也應(yīng)該是5V啊?
回復(fù)

使用道具 舉報

ID:207421 發(fā)表于 2021-3-30 16:44 | 顯示全部樓層
仔細(xì)檢查是不是沒有限流電阻導(dǎo)致的電流過大發(fā)熱了
回復(fù)

使用道具 舉報

ID:883770 發(fā)表于 2021-3-30 17:50 | 顯示全部樓層
angmall 發(fā)表于 2021-3-30 07:55
74HC595 不能推動12V的數(shù)碼管
你可以用  TPIC6C596 8位移位寄存器 7segment displays 7段數(shù)碼管

74HC595 輸出低電平有效,12V電源經(jīng)過數(shù)碼管的筆段(12v燈帶做的)回流到595管腳
回復(fù)

使用道具 舉報

ID:883770 發(fā)表于 2021-3-30 17:53 | 顯示全部樓層
51hei團(tuán)團(tuán) 發(fā)表于 2021-3-29 21:58
發(fā)燙與程序無關(guān),是你電路的問題,程序不會導(dǎo)致74hc595發(fā)燙

四個IC只有第一個發(fā)燙,檢查了線路也沒有發(fā)現(xiàn)問題,把后面IC移前來替換也發(fā)燙,IC換到后面就不燙
回復(fù)

使用道具 舉報

ID:883770 發(fā)表于 2021-3-31 10:53 | 顯示全部樓層
lwh999995 發(fā)表于 2021-3-30 16:44
仔細(xì)檢查是不是沒有限流電阻導(dǎo)致的電流過大發(fā)熱了

我懷疑可能就是這個問題
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久久久 | 久久精品日产第一区二区三区 | 成人一区二区三区视频 | 天天干天天草 | 亚洲精品久久国产高清情趣图文 | 国产精品区一区二 | 亚洲欧美国产一区二区三区 | 99精品久久久久久中文字幕 | 国产一区二区三区在线免费 | www.久久久.com | 色视频在线观看 | 久久久国产一区二区三区四区小说 | 日本三级网址 | 免费观看国产视频在线 | 国内精品久久久久久久影视简单 | 不卡的av在线 | 粉嫩一区二区三区四区公司1 | 中文字幕人成乱码在线观看 | 国产精品成人一区二区三区夜夜夜 | 高清人人天天夜夜曰狠狠狠狠 | 99热视 | 久热免费 | 亚洲免费在线观看视频 | 亚洲精品区 | 99久久婷婷国产综合精品电影 | 国产99精品 | 成人免费久久 | 欧美日韩成人一区二区 | 精品在线观看入口 | 国产免费拔擦拔擦8x高清 | 韩国av网站在线观看 | 成人在线精品视频 | 久久精品福利 | 在线观看中文字幕一区二区 | 国产精品久久视频 | 国产日韩精品视频 | 一区二区在线免费观看视频 | 在线视频成人 | 精品国产一区二区三区成人影院 | 亚洲国产精品久久久 | 欧美一级大片 |