欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5257|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

DS1302與1602顯示時(shí)間正常,但用按鍵無(wú)法調(diào)整時(shí)間

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:33544 發(fā)表于 2017-6-22 17:19 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
DS1302與1602顯示時(shí)間正常,但用按鍵無(wú)法調(diào)整時(shí)間,好像是數(shù)據(jù)沒(méi)有存入,找不到問(wèn)題請(qǐng)教大家了下面代碼是DS1302的驅(qū)動(dòng)代碼;

#include"sys_config.h"

u8 getTimebuf[7];//存放時(shí)間數(shù)據(jù)
u8 time[]={"  :  :  "};                                        //時(shí)間格式字符串
u8 date[]={"20  -  -  "};                                //日期格式字符串
u8 week[]={"   "};                                                //星期格式字符串
u8 weeklist[]={"SunMonTueWedThuFriSat"};        //星期字符列表


int count=0;//設(shè)定秒分時(shí)日月星期年的時(shí)候count的值分別為1235647
int alarm=0;//是否進(jìn)入鬧鐘設(shè)置界面 123分別代表開(kāi)關(guān) 分 小時(shí)的設(shè)置
int isOpen;//鬧鐘是否開(kāi)啟  默認(rèn)不開(kāi)啟
int fen,shi;//鬧鐘的分鐘小時(shí)
int isRing;//鬧鐘是否在響
u8 isInit_1302;//是否初始化時(shí)鐘完畢

//sbit scl=P1^3;//時(shí)鐘線
//sbit rst=P1^5;//復(fù)位線
//sbit io=P1^4;//數(shù)據(jù)口
/**********************ds1302初始化*****************************/
void init_ds1302(){
        //ds1302初始化
       
        isInit_1302=read_ds1302(0x81);        //讀出時(shí)鐘狀態(tài)
        if(isInit_1302&0x80){                        //說(shuō)明沒(méi)有初始化
                write_ds1302(0x8e,0x00);        //關(guān)閉寫保護(hù)  以后一直開(kāi)著
                write_ds1302(0x90,0xa5);         //輔助電源充電命令 一個(gè)二極管  一個(gè)2K電阻
                write_ds1302(0x80,0x00);        //秒 CH置0 開(kāi)啟時(shí)鐘
                write_ds1302(0x82,0x00);        //分
                write_ds1302(0x84,0x00);        //時(shí)
                write_ds1302(0x86,0x00);        //日
                write_ds1302(0x88,0x01);        //月
                write_ds1302(0x8a,0x01);        //星期
                write_ds1302(0x8c,0x17);        //年
                write_ds1302(0x8e,0x80);
        }
}
/**********************ds1302寫一個(gè)字節(jié)數(shù)據(jù)*****************************/
void write_ds1302_byte(u8 temp){
        //ds1302寫一個(gè)字節(jié)數(shù)據(jù)
        u8 i;
        for(i=0;i<8;i++){
                io=temp&0x01;//將數(shù)據(jù)放到IO口上
                scl=0;//scl為低時(shí)準(zhǔn)備數(shù)據(jù)
                scl=1;//上升沿寫入
                temp>>=1;
        }
}
/**********************向地址add寫入數(shù)據(jù)datds1302*****************************/
void write_ds1302(u8 add,u8 dat){
        //向地址add寫入數(shù)據(jù)dat
        rst=0;
        scl=0;
        rst=1;
        write_ds1302_byte(add);
        write_ds1302_byte(dat);
        scl=1;
        rst=0;
}
/**********************ds1302讀數(shù)據(jù)*****************************/
u8 read_ds1302(u8 add)
        {
        //ds1302讀數(shù)據(jù)
        u8 i,dat;
        rst=0;
        scl=0;
        rst=1;
        write_ds1302_byte(add);//首先寫入要讀的數(shù)據(jù)處的地址
        for(i=0;i<8;i++){
                if(io==1){
                        dat|=0x80;
                }
                scl=1;
                scl=0;//下降沿讀取數(shù)據(jù)
                dat>>=1;
        }
        scl=1;
        rst=0;
        return dat;
}

/**********************ds1302讀時(shí)間*****************************/
void read_time(u8 *s){
          u8 i;
          u8 ucAddr = 0x81;
          for (i=0;i<7;i++){
                s[i] = read_ds1302(ucAddr);//格式為: 秒 分 時(shí) 日 月 星期 年
                ucAddr += 2;
          }
}

/**********************ds1302設(shè)定時(shí)間*****************************/
void set_time(u8 *pSecDa){
        //設(shè)定時(shí)間
        u8 i;
        u8 ucAddr = 0x80;
        write_ds1302(0x8e,0x00);       
        for(i =7;i>0;i--){
                write_ds1302(ucAddr,*pSecDa); //秒 分 時(shí) 日 月 星期 年
                pSecDa++;
                ucAddr+=2;
        }
        write_ds1302(0x8e,0x80);
}
下面是按鈕賦值代碼,代碼運(yùn)行時(shí),光標(biāo)移動(dòng)的按鍵更改值都正常,就是更新不了時(shí)間
void key_scan()
       
{
        int i;
        u8 code tips1[]="SET SUCCESS";//鬧鐘設(shè)置成功的提示
        u8 code tips2[]="CANCEL SUCCESS";//取消鬧鐘的提示
        if(key_dat==4){//檢測(cè)是否按下
                delay(10);//消抖
                if(LCD_cnt)
                {//再次檢測(cè)是否按下
                LCD_cnt=0;
                        while(!key_set_time);//檢測(cè)是否松開(kāi)
                        delay(10);//延時(shí)消抖
                        while(!key_set_time);//再次檢測(cè)是否松開(kāi)
                        if(alarm==0)
                        {//當(dāng)沒(méi)有顯示鬧鐘界面時(shí)才顯示時(shí)間設(shè)定
                                count++;       
                               
                                write_ds1302(0x80,0x80);//讓時(shí)鐘停止
                                if(count==8){//繼續(xù)走時(shí),說(shuō)明時(shí)間已經(jīng)設(shè)定好了
                                        Lcd1602_WriteCom(0x0c);//讓光標(biāo)消失
                                        LED1=1;
                                        set_time(getTimebuf);//寫入新的時(shí)間
                                        write_ds1302(0x80,0x00);//讓時(shí)鐘繼續(xù)
                                        count=0;BE_cnt=500;        //蜂鳴器
                                        return;
                                }
                                LED1=0;
                                switch(count){
                                        case 1:
                                                Lcd1602_WriteCom(0x80+0x40+7);//在秒的位置
                                                break;
                                        case 2:
                                                Lcd1602_WriteCom(0x80+0x40+4);//在分的位置
                                                break;
                                        case 3:
                                                Lcd1602_WriteCom(0x80+0x40+1);//在時(shí)的位置
                                                break;
                                        case 4:
                                                Lcd1602_WriteCom(0x80+14);//在星期的位置
                                                break;
                                        case 5:
                                                Lcd1602_WriteCom(0x80+10);//在日的位置
                                                break;
                                        case 6:
                                                Lcd1602_WriteCom(0x80+7);//在月的位置
                                                break;
                                        case 7:
                                                Lcd1602_WriteCom(0x80+4);//在年的位置
                                                break;
                                }
                                Lcd1602_WriteCom(0x0f);//讓光標(biāo)閃爍
                        }
                }
        }
        if(key_add==0){//檢測(cè)是否按下
                delay(10);//消抖
  if(add_LCD)
        {//再次檢測(cè)是否按下
                        add_LCD=0;
                        while(!key_add);//檢測(cè)是否松開(kāi)
                        delay(10);//延時(shí)消抖
                        while(!key_add);//再次檢測(cè)是否松開(kāi)
                        if(count!=0)
                                {
                                switch(count){
                                case 1:
                                        //在秒的位置
                                        getTimebuf[0]++;
                                        if(getTimebuf[0]==0x5a){
                                                getTimebuf[0]=0;
                                        }
                                        if(getTimebuf[0]==0x4a){
                                                getTimebuf[0]=0x50;
                                        }
                                        if(getTimebuf[0]==0x3a){
                                                getTimebuf[0]=0x40;
                                        }
                                        if(getTimebuf[0]==0x2a){
                                                getTimebuf[0]=0x30;
                                        }
                                        if(getTimebuf[0]==0x1a){
                                                getTimebuf[0]=0x20;
                                        }
                                        if(getTimebuf[0]==0x0a){
                                                getTimebuf[0]=0x10;
                                        }
                                        time[6]=(getTimebuf[0])/16+48;//格式化時(shí)間秒
                                        time[7]=(getTimebuf[0])%16+48;
                                        Lcd1602_WriteCom(0x80+0x40+6);//在秒的位置
                                        Lcd1602_Writedata(time[6]);
                                        Lcd1602_WriteCom(0x80+0x40+7);//在秒的位置
                                        Lcd1602_Writedata(time[7]);
                                        Lcd1602_WriteCom(0x80+0x40+7);//讓光標(biāo)在秒的位置閃爍
                                        break;
                                case 2:
                                        //在分的位置
                                        getTimebuf[1]++;
                                        if(getTimebuf[1]==0x5a){
                                                getTimebuf[1]=0;
                                        }
                                        if(getTimebuf[1]==0x4a){
                                                getTimebuf[1]=0x50;
                                        }
                                        if(getTimebuf[1]==0x3a){
                                                getTimebuf[1]=0x40;
                                        }
                                        if(getTimebuf[1]==0x2a){
                                                getTimebuf[1]=0x30;
                                        }
                                        if(getTimebuf[1]==0x1a){
                                                getTimebuf[1]=0x20;
                                        }
                                        if(getTimebuf[1]==0x0a){
                                                getTimebuf[1]=0x10;
                                        }
                                        time[3]=(getTimebuf[1])/16+48;//格式化時(shí)間分
                                        time[4]=(getTimebuf[1])%16+48;
                                        Lcd1602_WriteCom(0x80+0x40+3);//在分的位置
                                        Lcd1602_Writedata(time[3]);
                                        Lcd1602_WriteCom(0x80+0x40+4);//在分的位置
                                        Lcd1602_Writedata(time[4]);
                                        Lcd1602_WriteCom(0x80+0x40+4);//讓光標(biāo)在分的位置閃爍
                                        break;
                                case 3:
                                        //在時(shí)的位置
                                        getTimebuf[2]++;
                                        if(getTimebuf[2]==0x24){
                                                getTimebuf[2]=0;
                                        }
                                        if(getTimebuf[2]==0x1a){
                                                getTimebuf[2]=0x20;
                                        }
                                        if(getTimebuf[2]==0x0a){
                                                getTimebuf[2]=0x10;
                                        }
                                        time[0]=(getTimebuf[2])/16+48;//格式化時(shí)間小時(shí)
                                        time[1]=(getTimebuf[2])%16+48;
                                        Lcd1602_WriteCom(0x80+0x40+0);//在小時(shí)的位置
                                        Lcd1602_Writedata(time[0]);
                                        Lcd1602_WriteCom(0x80+0x40+1);
                                        Lcd1602_Writedata(time[1]);
                                        Lcd1602_WriteCom(0x80+0x40+1);
                                        break;
                                case 4:
                                        //在星期的位置
                                        getTimebuf[5]++;
                                        if(getTimebuf[5]==0x08){
                                                getTimebuf[5]=0x01;
                                        }
                                        if((getTimebuf[5]%10)*3==21){//輪完了  重新開(kāi)始
                                                week[0]=weeklist[0];
                                                week[1]=weeklist[1];
                                                week[2]=weeklist[2];
                                        }else{
                                                week[0]=weeklist[(getTimebuf[5]%10)*3];//格式化星期
                                                week[1]=weeklist[(getTimebuf[5]%10)*3+1];
                                                week[2]=weeklist[(getTimebuf[5]%10)*3+2];
                                        }
                                        Lcd1602_WriteCom(0x80+12);
                                        Lcd1602_Writedata(week[0]);
                                        Lcd1602_WriteCom(0x80+13);
                                        Lcd1602_Writedata(week[1]);
                                        Lcd1602_WriteCom(0x80+14);
                                        Lcd1602_Writedata(week[2]);
                                        Lcd1602_WriteCom(0x80+14);
                                        break;
                                case 5:
                                        //在日的位置
                                        getTimebuf[3]++;
                                        if(getTimebuf[3]==0x32){
                                                getTimebuf[3]=0x01;
                                        }
                                        if(getTimebuf[3]==0x2a){
                                                getTimebuf[3]=0x30;
                                        }
                                        if(getTimebuf[3]==0x1a){
                                                getTimebuf[3]=0x20;
                                        }
                                        if(getTimebuf[3]==0x0a){
                                                getTimebuf[3]=0x10;
                                        }
                                        date[8]=(getTimebuf[3])/16+48;
                                        date[9]=(getTimebuf[3])%16+48;
                                        Lcd1602_WriteCom(0x80+9);
                                        Lcd1602_Writedata(date[8]);
                                        Lcd1602_WriteCom(0x80+10);
                                        Lcd1602_Writedata(date[9]);
                                        Lcd1602_WriteCom(0x80+10);
                                        break;
                                case 6:
                                        //在月的位置
                                        getTimebuf[4]++;
                                        if(getTimebuf[4]==0x13){
                                                getTimebuf[4]=0x01;
                                        }
                                        if(getTimebuf[4]==0x0a){
                                                getTimebuf[4]=0x10;
                                        }
                                        date[5]=(getTimebuf[4])/16+48;
                                        date[6]=(getTimebuf[4])%16+48;
                                        Lcd1602_WriteCom(0x80+6);
                                        Lcd1602_Writedata(date[5]);
                                        Lcd1602_WriteCom(0x80+7);
                                        Lcd1602_Writedata(date[6]);
                                        Lcd1602_WriteCom(0x80+7);
                                        break;
                                case 7:
                                        //在年的位置
                                        getTimebuf[6]++;
                                        if(getTimebuf[6]==0x9a){
                                                getTimebuf[6]=0x00;
                                        }
                                        if(getTimebuf[6]==0x8a){
                                                getTimebuf[6]=0x90;
                                        }
                                        if(getTimebuf[6]==0x7a){
                                                getTimebuf[6]=0x80;
                                        }
                                        if(getTimebuf[6]==0x6a){
                                                getTimebuf[6]=0x70;
                                        }
                                        if(getTimebuf[6]==0x5a){
                                                getTimebuf[6]=0x60;
                                        }
                                        if(getTimebuf[6]==0x4a){
                                                getTimebuf[6]=0x50;
                                        }
                                        if(getTimebuf[6]==0x3a){
                                                getTimebuf[6]=0x40;
                                        }
                                        if(getTimebuf[6]==0x2a){
                                                getTimebuf[6]=0x30;
                                        }
                                        if(getTimebuf[6]==0x1a){
                                                getTimebuf[6]=0x20;
                                        }
                                        if(getTimebuf[6]==0x0a){
                                                getTimebuf[6]=0x10;
                                        }
                                        date[2]=(getTimebuf[6])/16+48;
                                        date[3]=(getTimebuf[6])%16+48;
                                        Lcd1602_WriteCom(0x80+3);
                                        Lcd1602_Writedata(date[2]);
                                        Lcd1602_WriteCom(0x80+4);
                                        Lcd1602_Writedata(date[3]);
                                        Lcd1602_WriteCom(0x80+4);
                                        break;
                                }
                        }
                       
                }
        }
        if(key_minus==0){//檢測(cè)是否按下
                delay(10);//消抖
                if(minus_LCD){//再次檢測(cè)是否按下
                        while(!key_minus);//檢測(cè)是否松開(kāi)
                        delay(10);//延時(shí)消抖
                        while(!key_minus);//再次檢測(cè)是否松開(kāi)
                        minus_LCD =0;
                        if(count!=0){
                                switch(count){
                                case 1:
                                        //在秒的位置
                                        getTimebuf[0]--;
                                        if(getTimebuf[0]==0xff){
                                                getTimebuf[0]=0x59;
                                        }
                                        if(getTimebuf[0]==0x4f){
                                                getTimebuf[0]=0x49;
                                        }
                                        if(getTimebuf[0]==0x3f){
                                                getTimebuf[0]=0x39;
                                        }
                                        if(getTimebuf[0]==0x2f){
                                                getTimebuf[0]=0x29;
                                        }
                                        if(getTimebuf[0]==0x1f){
                                                getTimebuf[0]=0x19;
                                        }
                                        if(getTimebuf[0]==0x0f){
                                                getTimebuf[0]=0x09;
                                        }
                                        time[6]=(getTimebuf[0])/16+48;//格式化時(shí)間秒
                                        time[7]=(getTimebuf[0])%16+48;
                                        Lcd1602_WriteCom(0x80+0x40+6);//在秒的位置
                                        Lcd1602_Writedata(time[6]);
                                        Lcd1602_WriteCom(0x80+0x40+7);//在秒的位置
                                        Lcd1602_Writedata(time[7]);
                                        Lcd1602_WriteCom(0x80+0x40+7);//讓光標(biāo)在秒的位置閃爍
                                        break;
                                case 2:
                                        //在分的位置
                                        getTimebuf[1]--;
                                        if(getTimebuf[1]==0xff){
                                                getTimebuf[1]=0x59;
                                        }
                                        if(getTimebuf[1]==0x4f){
                                                getTimebuf[1]=0x49;
                                        }
                                        if(getTimebuf[1]==0x3f){
                                                getTimebuf[1]=0x39;
                                        }
                                        if(getTimebuf[1]==0x2f){
                                                getTimebuf[1]=0x29;
                                        }
                                        if(getTimebuf[1]==0x1f){
                                                getTimebuf[1]=0x19;
                                        }
                                        if(getTimebuf[1]==0x0f){
                                                getTimebuf[1]=0x09;
                                        }
                                        time[3]=(getTimebuf[1])/16+48;//格式化時(shí)間分
                                        time[4]=(getTimebuf[1])%16+48;
                                        Lcd1602_WriteCom(0x80+0x40+3);//在分的位置
                                        Lcd1602_Writedata(time[3]);
                                        Lcd1602_WriteCom(0x80+0x40+4);//在分的位置
                                        Lcd1602_Writedata(time[4]);
                                        Lcd1602_WriteCom(0x80+0x40+4);//讓光標(biāo)在分的位置閃爍
                                        break;
                                case 3:
                                        //在時(shí)的位置
                                        getTimebuf[2]--;
                                        if(getTimebuf[2]==0xff){
                                                getTimebuf[2]=0x23;
                                        }
                                        if(getTimebuf[2]==0x1f){
                                                getTimebuf[2]=0x19;
                                        }
                                        if(getTimebuf[2]==0x0f){
                                                getTimebuf[2]=0x09;
                                        }
                                        time[0]=(getTimebuf[2])/16+48;//格式化時(shí)間小時(shí)
                                        time[1]=(getTimebuf[2])%16+48;
                                        Lcd1602_WriteCom(0x80+0x40+0);//在小時(shí)的位置
                                        Lcd1602_Writedata(time[0]);
                                        Lcd1602_WriteCom(0x80+0x40+1);
                                        Lcd1602_Writedata(time[1]);
                                        Lcd1602_WriteCom(0x80+0x40+1);
                                        break;
                                case 4:
                                        //在星期的位置
                                        getTimebuf[5]--;
                                        if(getTimebuf[5]==0){
                                                getTimebuf[5]=0x07;
                                        }
                                        if((getTimebuf[5]%10)*3==21){//輪完了  重新開(kāi)始
                                                week[0]=weeklist[0];
                                                week[1]=weeklist[1];
                                                week[2]=weeklist[2];
                                        }else{
                                                week[0]=weeklist[(getTimebuf[5]%10)*3];//格式化星期
                                                week[1]=weeklist[(getTimebuf[5]%10)*3+1];
                                                week[2]=weeklist[(getTimebuf[5]%10)*3+2];
                                        }
                                        Lcd1602_WriteCom(0x80+12);
                                        Lcd1602_Writedata(week[0]);
                                        Lcd1602_WriteCom(0x80+13);
                                        Lcd1602_Writedata(week[1]);
                                        Lcd1602_WriteCom(0x80+14);
                                        Lcd1602_Writedata(week[2]);
                                        Lcd1602_WriteCom(0x80+14);
                                        break;
                                case 5:
                                        //在日的位置
                                        getTimebuf[3]--;
                                        if(getTimebuf[3]==0){
                                                getTimebuf[3]=0x31;
                                        }
                                        if(getTimebuf[3]==0x2f){
                                                getTimebuf[3]=0x29;
                                        }
                                        if(getTimebuf[3]==0x1f){
                                                getTimebuf[3]=0x19;
                                        }
                                        if(getTimebuf[3]==0x0f){
                                                getTimebuf[3]=0x09;
                                        }
                                        date[8]=(getTimebuf[3])/16+48;
                                        date[9]=(getTimebuf[3])%16+48;
                                        Lcd1602_WriteCom(0x80+9);
                                        Lcd1602_Writedata(date[8]);
                                        Lcd1602_WriteCom(0x80+10);
                                        Lcd1602_Writedata(date[9]);
                                        Lcd1602_WriteCom(0x80+10);
                                        break;
                                case 6:
                                        //在月的位置
                                        getTimebuf[4]--;
                                        if(getTimebuf[4]==0){
                                                getTimebuf[4]=0x12;
                                        }
                                        if(getTimebuf[4]==0x0f){
                                                getTimebuf[4]=0x09;
                                        }
                                        date[5]=(getTimebuf[4])/16+48;
                                        date[6]=(getTimebuf[4])%16+48;
                                        Lcd1602_WriteCom(0x80+6);
                                        Lcd1602_Writedata(date[5]);
                                        Lcd1602_WriteCom(0x80+7);
                                        Lcd1602_Writedata(date[6]);
                                        Lcd1602_WriteCom(0x80+7);
                                        break;
                                case 7:
                                        //在年的位置
                                        getTimebuf[6]--;
                                        if(getTimebuf[6]==0xff){
                                                getTimebuf[6]=0x99;
                                        }
                                        if(getTimebuf[6]==0x8f){
                                                getTimebuf[6]=0x89;
                                        }
                                        if(getTimebuf[6]==0x7f){
                                                getTimebuf[6]=0x79;
                                        }
                                        if(getTimebuf[6]==0x6f){
                                                getTimebuf[6]=0x69;
                                        }
                                        if(getTimebuf[6]==0x5f){
                                                getTimebuf[6]=0x59;
                                        }
                                        if(getTimebuf[6]==0x4f){
                                                getTimebuf[6]=0x49;
                                        }
                                        if(getTimebuf[6]==0x3f){
                                                getTimebuf[6]=0x39;
                                        }
                                        if(getTimebuf[6]==0x2f){
                                                getTimebuf[6]=0x29;
                                        }
                                        if(getTimebuf[6]==0x1f){
                                                getTimebuf[6]=0x19;
                                        }
                                        if(getTimebuf[6]==0x0f){
                                                getTimebuf[6]=0x09;
                                        }
                                        date[2]=(getTimebuf[6])/16+48;
                                        date[3]=(getTimebuf[6])%16+48;
                                        Lcd1602_WriteCom(0x80+3);
                                        Lcd1602_Writedata(date[2]);
                                        Lcd1602_WriteCom(0x80+4);
                                        Lcd1602_Writedata(date[3]);
                                        Lcd1602_WriteCom(0x80+4);
                                        break;
                                }
                        }
                       
                }
        }
       
}





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:82765 發(fā)表于 2017-6-22 21:46 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

板凳
ID:164602 發(fā)表于 2017-6-23 08:24 | 只看該作者
我有這樣的程序,是例程。你可以借鑒一下。
不過(guò),這個(gè)例程也是有問(wèn)題的:設(shè)置的時(shí)間、日期十分的不完善,如:可以設(shè)置0月0日,2月可以有30、31日,6月可以有31日等等,不過(guò)這些是可以自己修改的。它只是個(gè)例程,拋磚引玉而已。
你說(shuō)的按鍵沒(méi)反應(yīng),是絕對(duì)可以借鑒一下的。你的程序太長(zhǎng),沒(méi)時(shí)間看啊。

DS1302顯示時(shí)鐘(可以按鍵設(shè)置時(shí)鐘).rar

50.65 KB, 下載次數(shù): 87

回復(fù)

使用道具 舉報(bào)

地板
ID:111634 發(fā)表于 2017-6-23 17:26 | 只看該作者
本帖最后由 zl2168 于 2017-6-23 20:51 編輯

實(shí)例91  具有校正功能的時(shí)鐘1302(LCD1602顯示)
Proteus仿真,確認(rèn)有效。
實(shí)例91 帶校正時(shí)鐘1302(LCD1602顯示).rar (52.68 KB, 下載次數(shù): 72)

以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1書中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購(gòu)買。
回復(fù)

使用道具 舉報(bào)

5#
無(wú)效樓層,該帖已經(jīng)被刪除
6#
ID:33544 發(fā)表于 2017-6-24 15:37 | 只看該作者
補(bǔ)充說(shuō)明一下,單片機(jī)用的是stc12c5a60s2,程序用仿真軟件運(yùn)行都很正常,硬件部分DS1302的三個(gè)腳上都加上了1K的上拉電阻,程序上電第一次初始化能寫進(jìn)數(shù)據(jù),上電后無(wú)法重復(fù)修改,程度邏輯在仿真軟件上運(yùn)行都正常,仿真時(shí)重復(fù)寫入數(shù)據(jù)也正常
回復(fù)

使用道具 舉報(bào)

7#
ID:292218 發(fā)表于 2018-3-15 11:39 | 只看該作者
wis98 發(fā)表于 2017-6-24 15:37
補(bǔ)充說(shuō)明一下,單片機(jī)用的是stc12c5a60s2,程序用仿真軟件運(yùn)行都很正常,硬件部分DS1302的三個(gè)腳上都加上了 ...

我也屬上電初始化可以更改,可是在循環(huán)里檢測(cè)串口通過(guò)串口就不能更改
回復(fù)

使用道具 舉報(bào)

8#
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表