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

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

QQ登錄

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

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

STC15單片機(jī)DS1302+12864電子鐘并且可調(diào)整 源程序

[復(fù)制鏈接]
ID:370644 發(fā)表于 2019-12-16 16:56 | 顯示全部樓層 |閱讀模式
/*********************************/
/*采用STC15F204EA  此單片機(jī)注意版本,
有A版與B版本之分,它引腳定義不一樣的,
請(qǐng)大家注意!
在12864上顯示萬(wàn)年歷:可以精確顯示
年月日星期時(shí)間,然后可以進(jìn)行時(shí)間任
意調(diào)整!長(zhǎng)按S1功能鍵后,進(jìn)行入調(diào)整
模式,此時(shí)顯示屏上光標(biāo)在閃動(dòng),再按
功能鍵可以跳到另一個(gè)需要調(diào)整的位置,
S2可以任意加值,按S3可以任意減值,
按8次功能鍵S1,可以回到走時(shí)狀態(tài)*/
以下是實(shí)物圖片展示!
AAA.jpg BB.jpg

單片機(jī)源程序如下:
/*********************************/
#include <reg52.h>//頭文件
#define uchar unsigned char//宏定義        
#define uint unsigned int//宏定義
sfr P0M0        =   0x94;
sfr P0M1        =   0x93;
sfr P1M0        =   0x92;
sfr P1M1        =   0x91;
sfr P2M0        =   0x96;
sfr P2M1        =   0x95;
sfr P3M0        =   0xb2;
sfr P3M1        =   0xb1;
sfr P4M0        =   0xb4;
sfr P4M1        =   0xb3;
sfr P5M0        =   0xca;
sfr P5M1        =   0xc9;
sfr P6M0        =   0xcc;
sfr P6M1        =   0xcb;
sfr P7M0        =   0xe2;
sfr P7M1        =   0xe1;
sfr P5=0xC8;//xxxx,1111 端口5
sbit SCLK=P0^1;//時(shí)鐘信號(hào)線
sbit DATA=P3^1;//數(shù)據(jù)線
sbit RST=P3^0;//復(fù)位端
sbit rs=P2^0;//液晶1602控制端
sbit rw=P2^1;//液晶1602控制端
sbit e=P2^2; //液晶1602使能端
sbit s1=P3^2;//功能鍵
sbit s2=P2^7;//-鍵
sbit s3=P2^6;//+鍵
/******************************************************/
/*變量分別為:miao秒,fen分,shi時(shí),ri日,yue月,nian年,
xin星期,dii定計(jì)數(shù)變量,num5按鍵計(jì)數(shù),readvalue轉(zhuǎn)換后數(shù)*/
/*******************************************************/
uchar miao,fen,shi,ri,yue,nian,xin,dii,num5, readvalue;
/******************************************************/
/*變量分別為:flash秒--年調(diào)整標(biāo)志位,flag顯示標(biāo)志位,
flag1進(jìn)入功能模式標(biāo)志位,flag2星期調(diào)整標(biāo)志位*/
/*******************************************************/
bit flash,flag,flag1,flag2;
uchar code table[]={"0123456789"};//液晶1602數(shù)據(jù)表
/**********************************/
//延時(shí)函數(shù)1//
//入口參數(shù):z
/*********************************/
void delaya(uchar z)//延時(shí)1
{
        uchar x;
        for(x=z;x>0;x--);                        
}
/**********************************/
//延時(shí)函數(shù)2//
//入口參數(shù):z
/*********************************/
void delayb(uchar z)
{
        uchar x,y;
        for(y=z;y>0;y--)
        for(x=100;x>0;x--);                        
}

/**********************************/
//向1302寫(xiě)一個(gè)字節(jié)數(shù)據(jù)//
//入口參數(shù):dat
/*********************************/
void write1302xei(uchar dat)
{
        uchar x;
        
        delaya(2);//等待一會(huì)兒
        for(x=0;x<8;x++)//循環(huán)8次將一個(gè)字?jǐn)?shù)發(fā)送完畢
        {
                DATA=dat&0x01;//取出最低位,從而實(shí)現(xiàn)一位位傳送
                delaya(2);//等待一會(huì)兒
                SCLK=1;//置高形成上升沿
                delaya(2);//延時(shí)
                SCLK=0;//置低
                dat>>=1;//等待傳送第二個(gè)字節(jié)
        }
}

/**************************************/
//根據(jù)控制字向1302寫(xiě)一個(gè)字節(jié)數(shù)據(jù)//
//入口參數(shù):控制參數(shù)kong,實(shí)際參數(shù)can
/*************************************/
void write1302(uchar kong,uchar can)
{
        SCLK=0;//置低
        RST=0;//置低
        RST=1;//高電平時(shí)送數(shù)據(jù)
        delaya(2);//延時(shí)
        write1302xei(kong);//寫(xiě)控制命令
        write1302xei(can);//寫(xiě)數(shù)據(jù)
        SCLK=1;//置高形成上升沿
        RST=0;//置低               
}
/**************************************/
//向1302讀一個(gè)字節(jié)數(shù)據(jù)//
//入口參數(shù):dat,x
/*************************************/
uchar read1302du()
{
        uchar dat,x;

        for(x=0;x<8;x++)//循環(huán)8次,讀完一個(gè)字節(jié)
        {
                dat>>=1;//右位一位為下一個(gè)字節(jié)發(fā)送作好準(zhǔn)備
                //DATA=dat;
                if(DATA==1)//如果數(shù)據(jù)端為1,則執(zhí)行下面語(yǔ)句
                dat|=0x80;//將最高位給它
                SCLK=1;//置高
                delaya(2);//延時(shí)
                SCLK=0;//置低
                delaya(2);//延時(shí)        
        }
        return dat;//將值返回
}
/**************************************/
//根據(jù)控制字向1302讀一個(gè)字節(jié)數(shù)據(jù)//
//入口參數(shù):控制參數(shù)kong  實(shí)際參:dat
/*************************************/
uchar read1302(uchar kong)
{
        uchar dat;//定義變量
        RST=0;//先置0
        SCLK=0;//置0
        RST=1;//準(zhǔn)備傳數(shù)據(jù)
        write1302xei(kong);//寫(xiě)控制字
        dat=read1302du();//讀數(shù)
        SCLK=1;//形成上升沿
        RST=0;//置0
        return dat;//將值返回
}
void init1302()
{
/*以下是掉電保護(hù)函數(shù)通過(guò)判斷標(biāo)志位是否為1來(lái)判斷*/
         uchar flag;
        flag=read1302(0x81);//讀秒數(shù)據(jù)
        if(flag&0x80==1)//判斷最高位是否為1,若為1則說(shuō)明芯片停止工作了,若為0則說(shuō)明沒(méi)有停止
        {
        write1302(0x8e,0x00);//去掉保護(hù)
        write1302(0x80,((12/10)<<4)|(12%10));/*顯示54秒/*先將BCD碼求模得到高位,然后左移四位,
        //得到了高四位,然后將BCD碼求余這樣就得到了低四位,然后相或就轉(zhuǎn)換成了二進(jìn)制代碼了*/
        write1302(0x82,((59/10)<<4)|(59%10));//顯示59分
        write1302(0x84,((23/10)<<4)|(23%10));//顯示23點(diǎn)
        write1302(0x86,((7/10)<<4)|(7%10));//顯示07日
        write1302(0x88,((3/10)<<4)|(3%10));//顯示03月
        write1302(0x8c,((10/10)<<4)|(10%10));//顯示10年
        write1302(0x8a,((7/10)<<4)|(7%10));//顯示星期天
        write1302(0x90,0xa5);//打開(kāi)充電方式,選擇一個(gè)二極管2K電阻
        write1302(0x8e,0x80);//打開(kāi)保護(hù)
        }

        /*以下是開(kāi)機(jī)復(fù)位函數(shù)*/
        /*
        write1302(0x8e,0x00);//去掉保護(hù)
        write1302(0x80,((12/10)<<4)|(12%10));
        write1302(0x82,((59/10)<<4)|(59%10));//顯示59分
        write1302(0x84,((23/10)<<4)|(23%10));//顯示23點(diǎn)
        write1302(0x86,((7/10)<<4)|(7%10));//顯示07日
        write1302(0x88,((3/10)<<4)|(3%10));//顯示03月
        write1302(0x8c,((10/10)<<4)|(10%10));//顯示10年
        write1302(0x8a,((7/10)<<4)|(7%10));//顯示星期天
        write1302(0x90,0xa5);//打開(kāi)充電方式,選擇一個(gè)二極管2K電阻
        write1302(0x8e,0x80);//打開(kāi)保護(hù)
        */
}
/**************************************/
//以下是液晶模塊1602操縱
/*************************************/

/**************************************/
//寫(xiě)指令到液晶
//入口參數(shù):dat
/*************************************/
/************************************************************************/
/**********************延時(shí)50微秒子程序**********************************/
/************************************************************************/
void delay50us(uint z) //延時(shí)子程序
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=19;y>0;y--);
}/***********寫(xiě)命令**********************/
void write1602(uchar dat)
{
        rs=0;//控制端置低
        rw=0;//控制端置低
        e=0;//使能端置低
        delay50us(50);
        P1=dat;//送數(shù)
        e=1;//使能端置1
        delay50us(50);
        e=0;//置0
        delay50us(50);
}
/*void write1602(uchar dat)
{
        write1602a(dat|0x80);//與0x80相或后得到的數(shù)
}*/
/**************************************/
//寫(xiě)數(shù)據(jù)(ASCII碼)到液晶
//入口參數(shù):dat
/*************************************/
void read1602(uchar dat)
{
        rs=1;//控制端置高
        rw=0;//控制端置低
        e=0;//使能端置0
        delay50us(50);
        P1=dat;//送數(shù)據(jù)
        e=1;//形成上升沿
        delay50us(50);
        e=0;//清0
        delay50us(50);
}
void delayms(uint z) //延時(shí)子程序
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=120;y>0;y--);
}
/************************************************************************/
/************************漢字指針的顯示方法**********************************/
/************************************************************************/
void hanzi(uchar *ch)
{
        while(*ch!=0)
        read1602(*ch++);
        delayms(200);        
}
/**************************************/
//1602液晶初始化
/*************************************/
void init1602()
{
        write1602(0x30);//
        /************************************/
        /*打開(kāi)所有顯示,0x08關(guān)顯示,關(guān)閉光標(biāo),關(guān)閉反白
        0x0c開(kāi)顯示,關(guān)閉光標(biāo),關(guān)閉反白,0x0e開(kāi)顯示,開(kāi)光標(biāo),關(guān)閉反白,
        0x0f開(kāi)顯示,開(kāi)光標(biāo),開(kāi)反白*/
        /************************************/
        write1602(0x01);//清屏  
        write1602(0x0c);//開(kāi)顯示,不顯示光標(biāo)
        write1602(0x06);//光標(biāo)右移,AC自動(dòng)加1
        write1602(0x89);//在第一行第2個(gè)位置顯示即相當(dāng)于0x81處顯示
        hanzi("【牛電子鐘】");
        write1602(0x98);//在第一行第2個(gè)位置顯示即相當(dāng)于0x81處顯示
        hanzi("SL1302IC15W204EA");
        write1602(0x80);//在第一行第2個(gè)位置顯示即相當(dāng)于0x81處顯示
        read1602('D');//在第一行第3個(gè)位置顯示D
        read1602('a');//在第一行第4個(gè)位置顯示a
        read1602('t');//在第一行第5個(gè)位置顯示t
        //read1602('e');//在第一行第6個(gè)位置顯示e
        read1602(':');//在第一行第7個(gè)位置顯示:
        read1602('2');//在第一行第8個(gè)位置顯示2
        read1602('0');//在第一行第9個(gè)位置顯示0
        write1602(0x84);//在第一行顯示
        read1602('-'); //顯示-
        read1602('-'); //顯示-
        write1602(0x86);//在第一行顯示
        read1602('-');//顯示-
        read1602('-'); //顯示-
        write1602(0x90);//在第二行第1個(gè)位置顯示a
        read1602('T');//顯示T
        read1602(':');//顯示:
        write1602(0x92);//在第二行顯示
        read1602(':');//顯示:
        write1602(0x94);//在第二行顯示
        read1602(':');//顯示:
        write1602(0x96);//在第二行顯示
        read1602('W');//顯示W(wǎng)
        read1602(':');//顯示:
}
/**************************************/
//1302數(shù)據(jù)顯示程序
/*************************************/

/**************************************/
//秒顯示程序
//入口參數(shù):dat
/*************************************/
void Displaymiao(uchar dat)
{
        write1602(0x95);//秒鐘顯示位置
        read1602(table[(dat/10)]);//顯示秒鐘十位
        read1602(table[(dat%10)]);//顯示秒鐘個(gè)位
}
/**************************************/
//分顯示程序
//入口參數(shù):dat
/*************************************/
void Displayfen(uchar dat)
{
        write1602(0x93);//分鐘顯示位置
        read1602(table[(dat/10)]);//顯示分鐘十位
        read1602(table[(dat%10)]);//顯示分鐘個(gè)位
}
/**************************************/
//時(shí)顯示程序
//入口參數(shù):dat
/*************************************/
void Displayshi(uchar dat)
{
        write1602(0x91);//時(shí)鐘顯示位置
        read1602(table[(dat/10)]);//顯示時(shí)鐘十位
        read1602(table[(dat%10)]);//顯示時(shí)鐘個(gè)位
}
/**************************************/
//日顯示程序
//入口參數(shù):dat
/*************************************/
void Displayri(uchar dat)
{
        write1602(0x87);//日顯示位置
        read1602(table[(dat/10)]);//顯示日十位
        read1602(table[(dat%10)]);//顯示日個(gè)位
}
/**************************************/
//月顯示程序
//入口參數(shù):dat
/*************************************/
void Displayyue(uchar dat)
{
        write1602(0x85);//月顯示位置
        read1602(table[(dat/10)]);//顯示月十位
        read1602(table[(dat%10)]);//顯示月個(gè)位
}
/**************************************/
//年顯示程序
//入口參數(shù):dat
/*************************************/
void Displaynian(uchar dat)
{
        write1602(0x83);//年顯示位置
        read1602(table[(dat/10)]);//顯示年十位
        read1602(table[(dat%10)]);//顯示年個(gè)位
}
/**************************************/
//星期幾顯示程序
//入口參數(shù):dat
/*************************************/
void Displayxin(uchar dat)
{
        write1602(0x97);//星期顯示位置
        read1602(table[(dat%10)]);//顯示星期個(gè)位
}
/**************************************/
//從1302里讀出數(shù)據(jù)并送往1602液晶顯示
/*************************************/
void value()
{
        readvalue=read1302(0x81);//讀出秒值給變量readvalue
        miao=((readvalue&0x70)>>4)*10+(readvalue&0x0f);/*先將秒數(shù)最高位與低四位去掉,
        然后右位四位*10得到高四位,然后將秒值保留低四位與高四位相加,這樣將二進(jìn)制碼轉(zhuǎn)換成了BCD碼*/        
        Displaymiao(miao);//將BCB碼送到液晶顯示
        readvalue=read1302(0x83);//讀出分值給變量readvalue
        fen=((readvalue&0x70)>>4)*10+(readvalue&0x0f);//將分二進(jìn)制碼轉(zhuǎn)換成BCD碼        
        Displayfen(fen);//將分送液晶1602顯示
        readvalue=read1302(0x85);//讀出時(shí)值給變量readvalue
        shi=((readvalue&0x70)>>4)*10+(readvalue&0x0f);//將時(shí)二進(jìn)制碼轉(zhuǎn)換成BCD碼        
        Displayshi(shi);//將時(shí)送液晶1602顯示
        readvalue=read1302(0x87);//讀出日值給變量readvalue
        ri=((readvalue&0x70)>>4)*10+(readvalue&0x0f);//將日二進(jìn)制碼轉(zhuǎn)換成BCD碼        
        Displayri(ri);//將日送液晶1602顯示
        readvalue=read1302(0x89);//讀出月值給變量readvalue
        yue=((readvalue&0x70)>>4)*10+(readvalue&0x0f);//將月二進(jìn)制碼轉(zhuǎn)換成BCD碼        
        Displayyue(yue);//將月送液晶1602顯示
        readvalue=read1302(0x8d);//讀出年值給變量readvalue
        nian=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//將月二進(jìn)制碼轉(zhuǎn)換成BCD碼        
        Displaynian(nian);//將年送液晶1602顯示
        readvalue=read1302(0x8b);//讀出星期值給變量readvalue
        xin=((readvalue&0x70)>>4)*10+(readvalue&0x0f);//將星期二進(jìn)制碼轉(zhuǎn)換成BCD碼        
        Displayxin(xin);//將星期送液晶1602顯示
}

/**************************************/
/*************按鍵處理子函數(shù)**********/
/*************************************/

void sky()
{
        if(flag1==1)//如果進(jìn)入功能模式標(biāo)志位為1,則執(zhí)行以下程序
        {
                write1302(0x8e,0x00);//讓時(shí)間停下來(lái)
                write1302(0x80,0x80);
                write1302(0x8e,0x80);//讓時(shí)間停下來(lái)
                flag=1;//讓顯示子程序停下來(lái)
                write1602(0x0f);//將液晶光標(biāo)閃動(dòng)打開(kāi),以便我們看清楚具體調(diào)哪個(gè)位置
                write1602(0x97);//將光標(biāo)閃爍的位置選定
                flash=1;//將秒---年標(biāo)志位打開(kāi)
                flag2=1;//將星期調(diào)整加+與減-標(biāo)志位打開(kāi)
        }
        if(flag2==1)//如果星期調(diào)整加+與減-標(biāo)志位為1就執(zhí)行以下程序
        {        
                if(s2==0)//如果+鍵按下就執(zhí)行以下程序
                {
                        delayb(5);//去下抖
                        if(s2==0)//再次確認(rèn)是否按下了
                        {
                                while(!s2)//按鍵釋放
                                Displayxin(xin);//調(diào)用顯示星期子程序
                                xin++;//將星期+1
                                if(xin==8)//如果星期到了8就清它清1
                                xin=1;//清1
                                write1302(0x8e,0x00);//去掉保護(hù)
                                write1302(0x8a,((xin/10)<<4)|(xin%10));//顯示星期天
                                write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                readvalue=read1302(0x8b);//讀星期
                                xin=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//將星期值還原        
                                Displayxin(xin);//送顯示
                                write1602(0x97);//光標(biāo)停留位置
                        }
                }
                if(s3==0)//如果-按鍵按下了
                {
                        delayb(5);//去抖
                        if(s3==0)//如果-按下了,就執(zhí)行以下程序
                        {
                                while(!s3)//按鍵釋放
                                Displayxin(xin);//星期顯示子程序
                                xin--;//減1        
                                if(xin==(1-1))//如果到了(1-1)就給它7,因?yàn)樾瞧谥?---7
                                xin=7;//將它給7
                                write1302(0x8e,0x00);//去掉保護(hù)
                                write1302(0x8a,((xin/10)<<4)|(xin%10));//顯示星期天
                                write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                readvalue=read1302(0x8b);
                                xin=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//讀星期值        
                                Displayxin(xin);//星期顯示子程序
                                write1602(0x97);//光標(biāo)位置
                        }
                }
        }
        if(flash==1)//如果秒---年標(biāo)志位打開(kāi),執(zhí)行以下程序
        {
                if(s1==0)//加+按鍵按下了嗎?
                {
                        delayb(5);//去抖
                        if(s1==0)//再次判斷是否按下
                        {
                                while(!s1);//按鍵釋放
                                flag2=0;//將星期調(diào)整加+與減-標(biāo)志位關(guān)閉,防止星期調(diào)整部分動(dòng)作
                                num5++;//將按鍵記數(shù)器加1
                                switch(num5)//判斷按鍵記數(shù)器
                                {
                                        case 1://如果等1調(diào)整秒
                                        flag1=0;//將進(jìn)入功能模式標(biāo)志位清0,即不要它動(dòng)作
                                        write1602(0x95);//光標(biāo)位置
                                        break;//返回
                                        case 2://調(diào)整分
                                        write1602(0x93);//光標(biāo)位置
                                        break;//返回
                                        case 3://調(diào)整時(shí)
                                        write1602(0x91);//光標(biāo)位置
                                        break;//返回
                                        case 4://調(diào)整日
                                        write1602(0x87);//光標(biāo)位置
                                        break;//返回
                                        case 5://調(diào)整月
                                        write1602(0x85);//光標(biāo)位置
                                        break;//返回
                                        case 6://調(diào)整年
                                        write1602(0x83);//光標(biāo)位置
                                        break;//返回
                                        case 7://歸0
                                        num5=0;//將記數(shù)器清0
                                        if(num5==0)//如果記數(shù)器為0,則執(zhí)下以下程序
                                        {
                                                write1302(0x8e,0x00);//讓時(shí)間停下來(lái)
                                                write1302(0x80,0x00);
                                                write1302(0x8e,0x80);//讓時(shí)間停下來(lái)
                                                flag=0;//讓時(shí)鐘開(kāi)始走
                                                flash=0;//秒--年調(diào)整標(biāo)志位復(fù)位
                                                flag1=0;//星期調(diào)整加+與減-標(biāo)志位復(fù)位
                                                TR0=1;//定時(shí)器打開(kāi),以準(zhǔn)備下次調(diào)整
                                                write1602(0x0c);//關(guān)閉光標(biāo)閃動(dòng)        
                                                break;
                                        }
                        
                                }        
                                                                                       
                        }
                }
        }
        if(num5!=0)//如果將按鍵記數(shù)器不為0則執(zhí)行以下程序
        {
                switch(num5)//判斷它num5情況
                {
                        /**************************************/
                        /*************秒處理子函數(shù)**********/
                        /*************************************/
                        case 1://miao秒調(diào)整
                        if(s2==0)//加按鍵有按下嗎?
                        {
                                delayb(5);
                                if(s2==0)
                                {
                                        while(!s2)//按鍵釋放
                                        Displaymiao(miao);//調(diào)用顯示
                                        miao++;//秒加1
                                        if(miao==60)//到了60?
                                        miao=0;//清0
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x80,((miao/10)<<4)|(miao%10));//秒數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x81);//調(diào)用讀秒子程序
                                        miao=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//還原秒        
                                        Displaymiao(miao);//顯示
                                        write1602(0x95);//光標(biāo)位置
                                }
                        }
                        if(s3==0)//減按鍵是否有按下?
                        {
                                delayb(5);
                                if(s3==0)
                                {
                                        while(!s3)//按鍵釋放
                                        Displaymiao(miao);//調(diào)用秒顯示
                                        miao--;//減1
                                        if(miao==(0-1))//如果秒等于(0-1)
                                        miao=59;//將秒寄存器給59
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x80,((miao/10)<<4)|(miao%10));//秒數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x81);//讀秒數(shù)據(jù)
                                        miao=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//轉(zhuǎn)換秒數(shù)據(jù)        
                                        Displaymiao(miao);//送顯示
                                        write1602(0x95);//光標(biāo)位置
                                }
                        }
                        break;//返回
                        /**************************************/
                        /*************分處理子函數(shù)**********/
                        /*************************************/
                        case 2://fen分鐘調(diào)整
                        if(s2==0)
                        {
                                delayb(5);
                                if(s2==0)
                                {
                                        while(!s2)
                                        Displayfen(fen);
                                        fen++;
                                        if(fen==60)
                                        fen=0;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x82,((fen/10)<<4)|(fen%10));//分?jǐn)?shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x83);
                                        fen=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);        
                                        Displayfen(fen);
                                        write1602(0x93);
                                }
                        }
                        if(s3==0)
                        {
                                delayb(5);
                                if(s3==0)
                                {
                                        while(!s3)
                                        Displayfen(fen);
                                        fen--;
                                        if(fen==(0-1))
                                        fen=59;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x82,((fen/10)<<4)|(fen%10));//分?jǐn)?shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x83);
                                        fen=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);        
                                        Displayfen(fen);
                                        write1602(0x93);
                                }
                        }
                        break;
                        /**************************************/
                        /*************小時(shí)處理子函數(shù)**********/
                        /*************************************/
                        case 3://shi小時(shí)調(diào)整
                        if(s2==0)
                        {
                                delayb(5);
                                if(s2==0)
                                {
                                        while(!s2)
                                        Displayshi(shi);
                                        shi++;
                                        if(shi==24)
                                        shi=0;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x84,((shi/10)<<4)|(shi%10));//時(shí)數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)        
                                        readvalue=read1302(0x85);
                                        shi=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);        
                                        Displayshi(shi);
                                        write1602(0x91);
                                }
                        }
                        if(s3==0)
                        {
                                delayb(5);
                                if(s3==0)
                                {
                                        while(!s3)
                                        Displayshi(shi);
                                        shi--;
                                        if(shi==(0-1))
                                        shi=23;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x84,((shi/10)<<4)|(shi%10));//時(shí)數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x85);
                                        shi=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);        
                                        Displayshi(shi);
                                        write1602(0x91);
                                }
                        }
                        break;
                        /**************************************/
                        /*************日處理子函數(shù)**********/
                        /*************************************/
                        case 4://ri日調(diào)整
                        if(s2==0)
                        {
                                delayb(5);
                                if(s2==0)
                                {
                                        while(!s2)
                                        Displayri(ri);
                                        ri++;
                                        if(ri==32)
                                        ri=1;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x86,((ri/10)<<4)|(ri%10));//日數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x87);
                                        ri=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);        
                                        Displayri(ri);
                                        write1602(0x87);
                                }
                        }
                        if(s3==0)
                        {
                                delayb(5);
                                if(s3==0)
                                {
                                        while(!s3)
                                        Displayri(ri);
                                        ri--;
                                        if(ri==(1-1))
                                        ri=31;
                                        Displayri(ri);
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x86,((ri/10)<<4)|(ri%10));//日數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)        
                                        readvalue=read1302(0x87);
                                        ri=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);        
                                        Displayri(ri);
                                        write1602(0x87);
                                }
                        }
                        break;
                        /**************************************/
                        /*************月處理子函數(shù)**********/
                        /*************************************/
                        case 5://yue月調(diào)整
                        if(s2==0)
                        {
                                delayb(5);
                                if(s2==0)
                                {
                                        while(!s2)
                                        Displayyue(yue);
                                        yue++;
                                        if(yue==13)
                                        yue=1;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x88,((yue/10)<<4)|(yue%10));//月數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x89);
                                        yue=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);        
                                        Displayyue(yue);
                                        write1602(0x85);
                                }
                        }
                        if(s3==0)
                        {
                                delayb(5);
                                if(s3==0)
                                {
                                        while(!s3)
                                        Displayyue(yue);
                                        yue--;
                                        if(yue==(1-1))
                                        yue=12;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x88,((yue/10)<<4)|(yue%10));//月數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x89);
                                        yue=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//月轉(zhuǎn)換        
                                        Displayyue(yue);
                                        write1602(0x85);
                                }
                        }
                        break;
                        /**************************************/
                        /*************年處理子函數(shù)**********/
                        /*************************************/
                        case 6://nian年調(diào)整
                        if(s2==0)
                        {
                                delayb(5);
                                if(s2==0)
                                {
                                        while(!s2)
                                        Displaynian(nian);
                                        nian++;
                                        if(nian==99)
                                        nian=0;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x8c,((nian/10)<<4)|(nian%10));//年數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x8d);
                                        nian=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//年數(shù)據(jù)轉(zhuǎn)換        
                                        Displaynian(nian);
                                        write1602(0x83);
                                }
                        }
                        if(s3==0)
                        {
                                delayb(5);
                                if(s3==0)
                                {
                                        while(!s3)
                                        Displaynian(nian);
                                        nian--;
                                        if(nian==(0-1))
                                        nian=99;
                                        write1302(0x8e,0x00);//去掉保護(hù)
                                        write1302(0x8c,((nian/10)<<4)|(nian%10));//年數(shù)據(jù)寫(xiě)入
                                        write1302(0x8e,0x80);//打開(kāi)保護(hù)
                                        readvalue=read1302(0x8d);
                                        nian=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);        
                                        Displaynian(nian);
                                        write1602(0x83);
                                }
                        }
                        break;
                }
        }               
}

/**************************************/
/************主程序處理部分***********/
/*************************************/
void main()
{
        P0M0=0x00;
        P0M1=0x00;
        P1M0=0x00;
        P1M1=0x00;
        P2M0=0x00;
        P2M1=0x00;
        P3M0=0x00;
        P3M1=0x00;
        P5M0=0x00;  
        P5M1=0x00;
        P4M0=0x00;  
        P4M1=0x00;
        TMOD=0x01;//選擇定時(shí)器工作方式
        TH0=(65536-20000)/256;//賦值給高位
        TL0=(65536-20000)%256;//賦值給低位
        EA=1;//開(kāi)總中斷
        ET0=1;//開(kāi)定時(shí)器中斷
        TR0=1;//開(kāi)定時(shí)器
        init1302();//初始化1302子程序
        init1602();//初始化1602子程序
        while(1)
        {
                if(flag==0)//如果標(biāo)志位flag等于0,則執(zhí)行顯示程序,即調(diào)整時(shí)間時(shí)不執(zhí)行顯示程序
                value();//調(diào)用顯示子程序
                sky();//調(diào)用按鍵子程序
        }
}
/**************************************/
/*****長(zhǎng)按功能鍵進(jìn)行調(diào)整處理部分*****/
/*************************************/
void led() interrupt 1 //中斷服務(wù)子程序
{  
        TH0=(65536-20000)/256;//賦值高位
        TL0=(65536-20000)%256;//賦值低位
        dii++;//將中斷次數(shù)加1
        if(dii==120)//到了120次中斷嗎?
        {
                dii=0;//清0準(zhǔn)備下一次中斷                        
                if(s1==0)//功能鍵按下了嗎?
                {
                        delayb(5);//消抖
                        if(s1==0)//再次確認(rèn)
                        {
                                while(!s1);//按鍵釋放        
                                flag1=1;//將進(jìn)入功能鍵標(biāo)置位置1
                                TR0=0;//關(guān)閉定時(shí)器,防止操縱其它功能時(shí)誤動(dòng)作
                        }
                }        
        }

}

下載地址:
實(shí)測(cè)視頻.rar (2.31 MB, 下載次數(shù): 40)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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