找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何修改一下下面的單片機(jī)代碼讓他可以在CT107D板上可以正常使用

[復(fù)制鏈接]
ID:1102216 發(fā)表于 2023-12-22 16:23 | 顯示全部樓層 |閱讀模式
#include <reg52.h>                 //調(diào)用單片機(jī)頭文件
#define uchar unsigned char  //無符號(hào)字符型 宏定義        變量范圍0~255
#define uint  unsigned int         //無符號(hào)整型 宏定義        變量范圍0~65535
bit flag_200ms ;
bit flag_100ms ;
sbit beep = P3^7;          //蜂鳴器定義
bit flag_beep_en;
uint clock_value;     //用作鬧鐘用的
uchar menu_1,menu_2;
uchar key_time,flag_value;   
bit key_500ms  ;
#include "ds1302.h"
#include "lcd1602.h"
/******************1ms 延時(shí)函數(shù)*******************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<120;j++);
}
/******************寫星期函數(shù)*******************/
void write_week(uchar hang,uchar add,uchar week)//寫星期函數(shù)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);         
        switch(week)
        {
                case 1:write_data('S');//星期數(shù)為7時(shí),顯示
                           write_data('U');
                           write_data('N');
                           break;
           
                case 2:write_data('M');//星期數(shù)據(jù)為1時(shí)顯示
                           write_data('O');
                           write_data('N');
                           break;
               
                case 3:write_data('T');//星期數(shù)據(jù)為2時(shí)顯示
                           write_data('U');
                           write_data('E');
                           break;
               
                case 4:write_data('W');//星期數(shù)據(jù)為3是顯示
                           write_data('E');
                           write_data('D');
                           break;
               
                case 5:write_data('T');//星期數(shù)據(jù)為4時(shí)顯示
                           write_data('H');
                           write_data('U');
                           break;
               
                case 6:write_data('F');//星期數(shù)據(jù)為5時(shí)顯示
                           write_data('R');
                           write_data('I');
                           break;
               
                case 7:write_data('S');//星期數(shù)據(jù)為6時(shí)顯示
                           write_data('T');
                           write_data('A');
                           break;
        }
}

/*************時(shí)鐘顯示***************/
void init_1602_ds1302()
{
        write_sfm2_ds1302(1,1,shi);                   //顯示時(shí)
        write_sfm2_ds1302(1,4,fen);                   //顯示分
        write_sfm2_ds1302(1,7,miao);           //顯示秒
        write_week(2,12,week);
        write_sfm2_ds1302(2,2,nian);   //顯示年
        write_sfm2_ds1302(2,5,yue);           //顯示月        
        write_sfm2_ds1302(2,8,ri);           //顯示日                        
}                                                                           
/*************定時(shí)器0初始化程序***************/
void init_time0()         
{
        EA   = 1;                   //開總中斷
        TMOD = 0X01;          //定時(shí)器0、工作方式1
        TH0 = 0X3C;
        TL0 = 0XB0;           //50ms
        ET0  = 1;                  //開定時(shí)器0中斷
        TR0  = 1;                  //允許定時(shí)器0定時(shí)
}
/*************鬧鐘報(bào)警函數(shù)***************/
void menu_dis()
{
        static uchar mm,value;
        if(flag_100ms == 1)                  //100ms執(zhí)行一次
        {
                flag_100ms = 0;
                if(open1 == 1)        //如果鬧鐘打開
                {
                        if((miao == 0) && (fen == fen1) && (shi == shi1))
                        {               
                                flag_beep_en = 1;        //有報(bào)警 打開蜂鳴器響的標(biāo)志位                                
                        }               
                        if(flag_beep_en == 1)        //鬧鐘以被打開
                        {
                                clock_value++;
                                if(clock_value <= 30)         
                                        beep = ~beep;           //蜂鳴器叫3秒
                                else if(clock_value > 30)
                                {
                                        beep = 1;                    //蜂鳴器停1秒
                                        if(clock_value > 40)
                                        {
                                                clock_value = 0;

                                        }
                                }
                                //  1 分鐘后自動(dòng)關(guān)閉鬧鐘
                                value ++;
                                if(value >= 10)
                                {
                                        value = 0;
                                        mm++;
                                        if(mm >= 60)
                                        {
                                                mm = 0;
                                                flag_beep_en = 0;
                                                beep = 1;        
                                        }
                                }                                       
                        }
                }        
        }
}


/********************獨(dú)立按鍵程序*****************/
uchar key_can;         //按鍵值

void key()         //獨(dú)立按鍵程序
{
        static uchar key_new;
        key_can = 20;                   //按鍵值還原
        P3 |= 0x78;                     //對應(yīng)的按鍵IO口輸出為1
        if((P3 & 0x78) != 0x78)                //按鍵按下
        {
                delay_1ms(1);                     //按鍵消抖動(dòng)
                if(((P3 & 0x78) != 0x78) && (key_new == 1))
                {                                                //確認(rèn)是按鍵按下
                        key_new = 0;
                        switch(P3 & 0x78)
                        {
                                case 0x70:  key_can = 4;  break;         //得到按鍵值
                                case 0x68:  key_can = 3;  break;         //得到按鍵值
                                case 0x58:  key_can = 2;  break;         //得到按鍵值
                                case 0x38:  key_can = 1;  break;         //得到按鍵值
                        }

                }                        
        }
        else
                key_new = 1;        
}


/**********************設(shè)置函數(shù)************************/
void key_with()
{
        if(key_can == 1)        //設(shè)置鍵
        {
                menu_1++;
                if(menu_1 == 1)          //設(shè)置時(shí)間
                {
                        menu_2 = 1;
                        write_string(1,0,"    :  :    W:  ");                        
                        write_string(2,0," 20  -  -       ");        
                }
                if(menu_1 == 2)          //設(shè)置鬧鐘
                {
                        menu_2 = 1;
                        write_string(1,0,"   set clock    ");                        
                        write_string(2,0,"    Y  00:00      ");        
                }
                if(menu_1 > 2)    //回到正常顯示
                {
                        menu_1 = 0;
                        write_guanbiao(1,2,0);         //關(guān)閉光標(biāo)
                        init_1602_dis_csf();      //初始化液晶顯示               
                }
        }
        if(key_can == 2)        //選擇鍵
        {
                flag_200ms = 1;
                if(menu_1 == 1)                  //設(shè)置時(shí)間
                {
                        menu_2 ++;
                        if(menu_2 > 7)
                                menu_2 = 1;
                }
                if(menu_1 == 2)                 //設(shè)置鬧鐘
                {
                        menu_2 ++;
                        if(menu_2 > 3)
                                menu_2 = 1;                                
                }
        }
        if(menu_1 == 1)
        {
                if(menu_2 == 1)                  //設(shè)置時(shí)
                {
                        if(key_can == 3)        //加
                        {
                                shi+=0x01;
                                if((shi & 0x0f) >= 0x0a)
                                        shi = (shi & 0xf0) + 0x10;
                                if(shi >= 0x24)
                                        shi = 0;
                        }               
                        if(key_can == 4)        //減
                        {
                                if(shi == 0x00)
                                        shi = 0x24;
                                if((shi & 0x0f) == 0x00)
                                        shi = (shi | 0x0a) - 0x10;
                                shi -- ;
                        }                                          
                }
                if(menu_2 == 2)                  //設(shè)置分
                {
                        if(key_can == 3)        //加
                        {
                                fen+=0x01;
                                if((fen & 0x0f) >= 0x0a)
                                        fen = (fen & 0xf0) + 0x10;
                                if(fen >= 0x60)
                                        fen = 0;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(fen == 0x00)
                                        fen = 0x5a;
                                if((fen & 0x0f) == 0x00)
                                        fen = (fen | 0x0a) - 0x10;
                                fen -- ;
                        }        
                }
                if(menu_2 == 3)                  //設(shè)置秒
                {
                        if(key_can == 3)        //加
                        {
                                miao+=0x01;
                                if((miao & 0x0f) >= 0x0a)
                                        miao = (miao & 0xf0) + 0x10;
                                if(miao >= 0x60)
                                        miao = 0;
                        }        
                        if(key_can == 4)        //減         
                        {
                                if(miao == 0x00)
                                        miao = 0x5a;
                                if((miao & 0x0f) == 0x00)
                                        miao = (miao | 0x0a) - 0x10;
                                miao -- ;                        
                        }
                }
                if(menu_2 == 4)                  //設(shè)置星期
                {
                        if(key_can == 3)        //加
                        {
                            week+=0x01;
                                if((week & 0x0f) >= 0x0a)
                                        week = (week & 0xf0) + 0x10;
                                if(week >= 0x08)
                                        week = 1;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(week == 0x01)
                                        week = 0x08;
                                if((week & 0x0f) == 0x00)
                                        week = (week | 0x0a) - 0x10;
                                week -- ;
                        }        
                }
                if(menu_2 == 5)                  //設(shè)置年
                {
                        if(key_can == 3)        //加
                        {
                            nian+=0x01;
                                if((nian & 0x0f) >= 0x0a)
                                        nian = (nian & 0xf0) + 0x10;
                                if(nian >= 0x9a)
                                        nian = 1;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(nian == 0x01)
                                        nian = 0x9a;
                                if((nian & 0x0f) == 0x00)
                                        nian = (nian | 0x0a) - 0x10;
                                nian -- ;               
                        }        
                }
                if(menu_2 == 6)                  //設(shè)置月
                {
                        if(key_can == 3)        //加
                        {
                            yue+=0x01;
                                if((yue & 0x0f) >= 0x0a)
                                        yue = (yue & 0xf0) + 0x10;
                                if(yue >= 0x13)
                                        yue = 1;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(yue == 0x01)
                                        yue = 0x13;
                                if((yue & 0x0f) == 0x00)
                                        yue = (yue | 0x0a) - 0x10;
                                yue -- ;                                       
                        }        
                }
                if(menu_2 == 7)                  //設(shè)置日
                {
                        if(key_can == 3)        //加
                        {
                    ri+=0x01;
                        if((ri & 0x0f) >= 0x0a)
                                ri = (ri & 0xf0) + 0x10;
                        if(ri >= 0x32)
                                ri = 0;                        
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(ri == 0x01)
                                        ri = 0x32;
                                if((ri & 0x0f) == 0x00)
                                        ri = (ri | 0x0a) - 0x10;
                                ri -- ;                        
                        }        
                }
                write_sfm2_ds1302(1,2,shi);           //顯示時(shí)
                write_sfm2_ds1302(1,5,fen);           //顯示分
                write_sfm2_ds1302(1,8,miao);           //顯示秒
                write_sfm1(1,14,week);           //顯示星期                                       
                write_sfm2_ds1302(2,3,nian);           //顯示年
                write_sfm2_ds1302(2,6,yue);           //顯示月
                write_sfm2_ds1302(2,9,ri);           //顯示日
                switch(menu_2)           // 光標(biāo)顯示
                {
                        case 1:  write_guanbiao(1,2,1);  break;
                        case 2:  write_guanbiao(1,5,1);  break;
                        case 3:  write_guanbiao(1,8,1);  break;
                        case 4:  write_guanbiao(1,14,1);  break;
                        case 5:  write_guanbiao(2,3,1);  break;
                        case 6:  write_guanbiao(2,6,1);  break;
                        case 7:  write_guanbiao(2,9,1);  break;
                }
                write_time();           //把時(shí)間寫進(jìn)去
        }        
/***************設(shè)置鬧鐘*********************/
        if(menu_1 == 2)
        {
                if(menu_2 == 1)                  //設(shè)置鬧鐘開關(guān)
                {
                        if(key_can == 3)        
                        {
                                open1 = 1;          //鬧鐘開
                        }               
                        if(key_can == 4)        
                        {
                                open1 = 0;          //鬧鐘關(guān)
                        }                                          
                }
                if(menu_2 == 2)                  //設(shè)置鬧鐘時(shí)
                {
                        if(key_can == 3)        //加
                        {
                            shi1+=0x01;
                                if((shi1 & 0x0f) >= 0x0a)
                                        shi1 = (shi1 & 0xf0) + 0x10;
                                if(shi1 >= 0x24)
                                        shi1 = 0;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(shi1 == 0x00)
                                        shi1 = 0x24;
                                if((shi1 & 0x0f) == 0x00)
                                        shi1 = (shi1 | 0x0a) - 0x10;
                                shi1 -- ;
                        }        
                }
                if(menu_2 == 3)                  //設(shè)置秒
                {
                        if(key_can == 3)        //加
                        {
                            fen1+=0x01;
                                if((fen1 & 0x0f) >= 0x0a)
                                        fen1 = (fen1 & 0xf0) + 0x10;
                                if(fen1 >= 0x60)
                                        fen1 = 0;
                        }        
                        if(key_can == 4)        //減         
                        {
                                if(fen1 == 0x00)
                                        fen1 = 0x5a;
                                if((fen1 & 0x0f) == 0x00)
                                        fen1 = (fen1 | 0x0a) - 0x10;
                                fen1 -- ;                        
                        }
                }
                if(open1 == 1)
                        write_string(2,4,"Y");        
                else
                        write_string(2,4,"N");        
                write_sfm2_ds1302(2,7,shi1);           //顯示鬧鐘時(shí)
                write_sfm2_ds1302(2,10,fen1);           //顯示鬧鐘分
                switch(menu_2)           // 光標(biāo)顯示
                {
                        case 1:  write_guanbiao(2,4,1);  break;
                        case 2:  write_guanbiao(2,7,1);  break;
                        case 3:  write_guanbiao(2,10,1);  break;
                }        

        }                        
}

/*****************主函數(shù)********************/
void main()
{        
        beep = 0;                                //開機(jī)叫一聲   
        delay_1ms(150);
        P0 = P1 = P2 = P3 = 0xff;                //單片機(jī)IO口初始化為1
        init_time0();                 //初始化定時(shí)器
        init_ds1302();                 //ds1302初始化
        init_1602();                 //lcd1602初始化
        init_1602_dis_csf(); //lcd1602初始化顯示
//        open1 = 1;                        //默認(rèn)鬧鐘開

        while(1)
        {
                key();                         //按鍵程序
                if(key_can < 10)
                {
                        if(flag_beep_en == 0)  //只有鬧鐘關(guān)了的時(shí)候才能進(jìn)入設(shè)置
                                key_with();        
                        else
                        {
                                flag_beep_en = 0;         //按下任意鍵可關(guān)閉鬧鐘
                                beep = 1;
                                clock_value = 0;
                                read_time();
                        }
                        
                }
               
                if(flag_200ms == 1)
                {        
                        flag_200ms = 0;
                        if(menu_1 == 0)
                        {
                                read_time();                  //讀時(shí)間
                                init_1602_ds1302();   //顯示時(shí)鐘
                        }
                }
                menu_dis();           //鬧鐘報(bào)警函數(shù)
                delay_1ms(1);
        }
}

/**************定時(shí)器0中斷程序*****************/
void time0() interrupt 1
{                        
        static uchar value;
        TH0 = 0X3C;
        TL0 = 0XB0;           //50ms
        value ++;           
        if((value % 2) == 0)         //100ms  
                flag_100ms = 1;         
        if(value >= 6)                         //200ms
        {
                value = 0;
                flag_200ms = 1;

回復(fù)

使用道具 舉報(bào)

ID:262 發(fā)表于 2023-12-22 17:18 | 顯示全部樓層
你程序底部缺2個(gè)}肯定不行啦
另外你說的CT107D 這個(gè)是個(gè)啥?
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2023-12-22 17:46 | 顯示全部樓層
先提供CT107D板的原理圖
回復(fù)

使用道具 舉報(bào)

ID:863362 發(fā)表于 2023-12-25 08:01 | 顯示全部樓層
藍(lán)橋杯比賽用的開發(fā)板吧?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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