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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1275|回復: 3
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:1102216 發表于 2023-12-22 16:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>                 //調用單片機頭文件
#define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
#define uint  unsigned int         //無符號整型 宏定義        變量范圍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 延時函數*******************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<120;j++);
}
/******************寫星期函數*******************/
void write_week(uchar hang,uchar add,uchar week)//寫星期函數
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);         
        switch(week)
        {
                case 1:write_data('S');//星期數為7時,顯示
                           write_data('U');
                           write_data('N');
                           break;
           
                case 2:write_data('M');//星期數據為1時顯示
                           write_data('O');
                           write_data('N');
                           break;
               
                case 3:write_data('T');//星期數據為2時顯示
                           write_data('U');
                           write_data('E');
                           break;
               
                case 4:write_data('W');//星期數據為3是顯示
                           write_data('E');
                           write_data('D');
                           break;
               
                case 5:write_data('T');//星期數據為4時顯示
                           write_data('H');
                           write_data('U');
                           break;
               
                case 6:write_data('F');//星期數據為5時顯示
                           write_data('R');
                           write_data('I');
                           break;
               
                case 7:write_data('S');//星期數據為6時顯示
                           write_data('T');
                           write_data('A');
                           break;
        }
}

/*************時鐘顯示***************/
void init_1602_ds1302()
{
        write_sfm2_ds1302(1,1,shi);                   //顯示時
        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);           //顯示日                        
}                                                                           
/*************定時器0初始化程序***************/
void init_time0()         
{
        EA   = 1;                   //開總中斷
        TMOD = 0X01;          //定時器0、工作方式1
        TH0 = 0X3C;
        TL0 = 0XB0;           //50ms
        ET0  = 1;                  //開定時器0中斷
        TR0  = 1;                  //允許定時器0定時
}
/*************鬧鐘報警函數***************/
void menu_dis()
{
        static uchar mm,value;
        if(flag_100ms == 1)                  //100ms執行一次
        {
                flag_100ms = 0;
                if(open1 == 1)        //如果鬧鐘打開
                {
                        if((miao == 0) && (fen == fen1) && (shi == shi1))
                        {               
                                flag_beep_en = 1;        //有報警 打開蜂鳴器響的標志位                                
                        }               
                        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 分鐘后自動關閉鬧鐘
                                value ++;
                                if(value >= 10)
                                {
                                        value = 0;
                                        mm++;
                                        if(mm >= 60)
                                        {
                                                mm = 0;
                                                flag_beep_en = 0;
                                                beep = 1;        
                                        }
                                }                                       
                        }
                }        
        }
}


/********************獨立按鍵程序*****************/
uchar key_can;         //按鍵值

void key()         //獨立按鍵程序
{
        static uchar key_new;
        key_can = 20;                   //按鍵值還原
        P3 |= 0x78;                     //對應的按鍵IO口輸出為1
        if((P3 & 0x78) != 0x78)                //按鍵按下
        {
                delay_1ms(1);                     //按鍵消抖動
                if(((P3 & 0x78) != 0x78) && (key_new == 1))
                {                                                //確認是按鍵按下
                        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;        
}


/**********************設置函數************************/
void key_with()
{
        if(key_can == 1)        //設置鍵
        {
                menu_1++;
                if(menu_1 == 1)          //設置時間
                {
                        menu_2 = 1;
                        write_string(1,0,"    :  :    W:  ");                        
                        write_string(2,0," 20  -  -       ");        
                }
                if(menu_1 == 2)          //設置鬧鐘
                {
                        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);         //關閉光標
                        init_1602_dis_csf();      //初始化液晶顯示               
                }
        }
        if(key_can == 2)        //選擇鍵
        {
                flag_200ms = 1;
                if(menu_1 == 1)                  //設置時間
                {
                        menu_2 ++;
                        if(menu_2 > 7)
                                menu_2 = 1;
                }
                if(menu_1 == 2)                 //設置鬧鐘
                {
                        menu_2 ++;
                        if(menu_2 > 3)
                                menu_2 = 1;                                
                }
        }
        if(menu_1 == 1)
        {
                if(menu_2 == 1)                  //設置時
                {
                        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)                  //設置分
                {
                        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)                  //設置秒
                {
                        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)                  //設置星期
                {
                        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)                  //設置年
                {
                        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)                  //設置月
                {
                        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)                  //設置日
                {
                        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);           //顯示時
                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)           // 光標顯示
                {
                        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();           //把時間寫進去
        }        
/***************設置鬧鐘*********************/
        if(menu_1 == 2)
        {
                if(menu_2 == 1)                  //設置鬧鐘開關
                {
                        if(key_can == 3)        
                        {
                                open1 = 1;          //鬧鐘開
                        }               
                        if(key_can == 4)        
                        {
                                open1 = 0;          //鬧鐘關
                        }                                          
                }
                if(menu_2 == 2)                  //設置鬧鐘時
                {
                        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)                  //設置秒
                {
                        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);           //顯示鬧鐘時
                write_sfm2_ds1302(2,10,fen1);           //顯示鬧鐘分
                switch(menu_2)           // 光標顯示
                {
                        case 1:  write_guanbiao(2,4,1);  break;
                        case 2:  write_guanbiao(2,7,1);  break;
                        case 3:  write_guanbiao(2,10,1);  break;
                }        

        }                        
}

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

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

/**************定時器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;

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

使用道具 舉報

沙發
ID:262 發表于 2023-12-22 17:18 | 只看該作者
你程序底部缺2個}肯定不行啦
另外你說的CT107D 這個是個啥?
回復

使用道具 舉報

板凳
ID:161164 發表于 2023-12-22 17:46 | 只看該作者
先提供CT107D板的原理圖
回復

使用道具 舉報

地板
ID:863362 發表于 2023-12-25 08:01 | 只看該作者
藍橋杯比賽用的開發板吧?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧洲一区二区 | 97免费在线观看视频 | 亚洲欧美国产精品久久 | av三级 | 亚洲手机在线 | 日本天天操| 国产视频一区二区 | 亚洲美女网站 | 日韩欧美三区 | 成年人在线观看 | 我要看免费一级毛片 | 久久99精品久久久久久琪琪 | 看真人视频一级毛片 | 国产成人精品一区二区三区在线 | 美女黄网 | 亚洲热在线视频 | 日韩高清一区 | 在线观看欧美一区 | 日韩美女在线看免费观看 | 成人片免费看 | 国产成人精品a视频一区www | 男女爱爱福利视频 | 久久99国产精一区二区三区 | 亚洲精品免费视频 | 久久亚洲精品国产精品紫薇 | 国产精品国产成人国产三级 | 欧美在线视频网站 | 久久久国产一区二区三区 | 成人在线小视频 | 亚洲免费视频网址 | 91精品国产91久久久久久吃药 | 热99| 午夜爱爱毛片xxxx视频免费看 | 国产91久久精品一区二区 | 日韩一区二区精品 | 精品国产1区2区3区 在线国产视频 | 中文字幕国产精品视频 | 欧美久久一区二区 | 成人午夜精品 | 亚洲一区二区在线视频 | 中文字幕 在线观看 |