⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c~

📁 使用AVR单片机实现的万年历功能,其中使用了ds1302和1602
💻 C~
📖 第 1 页 / 共 3 页
字号:
                        };
                }
                
        }
        
        
} 

void SetNoiseData(void)
{
        unsigned char key7KeyValue;		//存储按键键值的变量
        bit setbit;						//有键按下的标志
        bit setOnbit;					//显示的标志
        unsigned char key7I;			//循环变量
        
        setbit = 0;						//各个标志位清0
        setOnbit = 0;
        key7KeyValue = 0;
        time10msIsOK = 0;   
        time500msIsOK = 0; 
        time20sIsOK = 0;
        time500msCounter = 0;
        time20sCounter = 0;
               
        DS1302ReadRamData();			//读取闹钟数据
         

        
        for (key7I = 0; key7I < 8; key7I++)				//把闹钟数据赋值给DS1302Data
        {
                DS1302Data[key7I] = noiseData[key7I];
        }
        
		//显示初始化

        LcdSetXY(0, 0);
        LcdPutFlashString(solarData);
        LcdSetXY(1, 0);
        LcdPutFlashString(timeData);
        Change();
        DisplayOne(); 
 
         LcdSetXY(1, 6);	
         if (noiseData[8] == 0x01)
         {
                LcdPutOneChar(0x2A);
         }
         else
         {
                LcdPutOneChar(0x20);
         }
                
        key7I = 0;
        
        while (1)
        {
                FindTime();		//判断各个时间段是否已经到达
                
                if(time10msIsOK)
                {
                        time10msIsOK = 0;
                        key7KeyValue = FindKeyValue();		//读取键值
                        
                        switch (key7KeyValue)
                        {
                        case key7: 
                                time20sCounter = 0;			//只要有键按下则清0 20s计数器
                                
                                if (setbit)					//如果有键按下,则把DS1302的数据赋值给noiseData
                                {
                                        FindDataOfWeek();
                                        for (key7I = 0; key7I < 8; key7I++)
                                        {
                                                noiseData[key7I] = DS1302Data[key7I];
                                        }
                                        
                                        DS1302WriteRamData();		//写入闹钟数据
                                }
                                
                                break;
                        case key6:
                                time20sCounter = 0;			//只要有键按下则清0 20s计数器
                                setbit = 1;				//有键按下标志位置1,表示有键按下
                                //noiseSetFlag = ~noiseSetFlag;		
                                
                                if (noiseData[8] == 0x01)         //取反闹钟标志
                                {
                                        noiseData[8] = 0x00;
                                }
                                else
                                {
                                        noiseData[8] = 0x01;
                                }
                                
                                LcdSetXY(1, 6);					//显示闹钟标志,闹钟标志为'*'
                                if (noiseData[8] == 0x01)
                                {
                                        LcdPutOneChar(0x2A);
                                }
                                else
                                {
                                        LcdPutOneChar(0x20);
                                }
                                break;
                        case key1:			//按键1为右移处理
                                setbit = 1;				//有键按下标志位置1,表示有键按下
                                time20sCounter = 0;			//只要有键按下则清0 20s计数器
                                //以下两行显示为了防止刚才恰好没有显示  
                                LcdPutOneChar((DS1302Data[key7I] / 10) + 48);
                                LcdPutOneChar((DS1302Data[key7I] % 10) + 48);  
                                
                                if (key7I == 0)		
                                {
                                        key7I = 6;
                                }
                                else if (key7I == 4)
                                {
                                        key7I = 2;
                                }
                                else
                                {
                                        --key7I;
                                }
                                
                                break;
                        case key2:			//按键2为左移处理
                                setbit = 1;				//有键按下标志位置1,表示有键按下
                                time20sCounter = 0;		//只要有键按下则清0 20s计数器  
                                //以下两行显示为了防止刚才恰好没有显示
                                LcdPutOneChar((DS1302Data[key7I] / 10) + 48);
                                LcdPutOneChar((DS1302Data[key7I] % 10) + 48);
                                
                                if (key7I == 6)
                                {
                                        key7I = 0;
                                }
                                else if (key7I == 2)
                                {
                                        key7I = 4;
                                }
                                else
                                {
                                        ++key7I;
                                }
                                
                                break;
                        case key3:		//按键3为加1处理
                                setbit = 1;				//有键按下标志位置1,表示有键按下
                                time20sCounter = 0;			//只要有键按下则清0 20s计数器
                                ++DS1302Data[key7I];
                                break;
                         case key4:		//按键4为减1处理
                                setbit = 1;				//有键按下标志位置1,表示有键按下
                                time20sCounter = 0;			//只要有键按下则清0 20s计数器
                                --DS1302Data[key7I];
                                break;
                         case key5:	//按键5为加10处理
                                setbit = 1;				//有键按下标志位置1,表示有键按下
                                time20sCounter = 0; 			//只要有键按下则清0 20s计数器
                                DS1302Data[key7I] += 10;
                                break;
                         case key8:		//按键8为减10处理
                                setbit = 1;				//有键按下标志位置1,表示有键按下
                                time20sCounter = 0;			//只要有键按下则清0 20s计数器
                                DS1302Data[key7I] -= 10;
                                break;
                         };
                         
                } 
                
                if ((key7KeyValue == key7)||(time20sIsOK ==1))		//如果按下退出键或者20s没有键按下,则进入设置闹钟音乐
                {                      
                        noiseMusicOrPlayMusic = 1;                 
                        SetMusicPlay();
                        noiseMusicOrPlayMusic = 0;
           //             DS1302ReadTimeData();
           //             Change();
           //             LcdSetXY(0, 0);
           //             LcdPutFlashString(solarData);
           //             LcdSetXY(1, 0);
           //             LcdPutFlashString(timeData);
           //             DisplayOne(); 
                        break;
                }
                else
                {
                        if (time500msIsOK)		//500ms到,取反显示标志
                        {
                                time500msIsOK = 0;
                                setOnbit = ~setOnbit;
                        }
                        
                        switch (key7I)//switch语句用于选择显示的位置
                        { 
                        case 0: 
                                LcdSetXY(1, 14);
                                break;
                        case 1:
                                LcdSetXY(1, 11);
                                break;
                        case 2:                 
                                LcdSetXY(1, 8);
                                break;
                        case 4: 
                                LcdSetXY(0, 14);
                                break;
                        case 5:                 
                                LcdSetXY(0, 11);
                                break;
                        case 6:                 
                                LcdSetXY(0, 8);
                                break;
                        };
                           
                        DS1302CheckDataOve();			//判断数据有效性
                        
                        if (setOnbit)					//500ms显示数据,500ms显示空格
                        {
                                LcdPutOneChar(0x20);
                                LcdPutOneChar(0x20);
                        }
                        else
                        {
                                LcdPutOneChar((DS1302Data[key7I] / 10) + 48);
                                LcdPutOneChar((DS1302Data[key7I] % 10) + 48);
                        }   
                        
                        switch (key7I)//switch语句用于选择显示的位置
                        { 
                        case 0: 
                                LcdSetXY(1, 14);
                                break;
                        case 1:
                                LcdSetXY(1, 11);
                                break;
                        case 2:                 
                                LcdSetXY(1, 8);
                                break;
                        case 4: 
                                LcdSetXY(0, 14);
                                break;
                        case 5:                 
                                LcdSetXY(0, 11);
                                break;
                        case 6:                 
                                LcdSetXY(0, 8);
                                break;
                        };
                }
                
        }
        
        
} 

void SetMusicPlay(void)
{
        unsigned char key8KeyValue;			//用于存储键值
        unsigned char key8MusicPlayChoose;		//选择播放的音乐
        bit setbit;							//有按键按下标志位
        
        setbit = 0;	  
        key8KeyValue = 0;							//初始化为0,表示没有按键按下
        key8MusicPlayChoose = 0x01;				//初始化为第一首音乐
        time10msIsOK = 0;						//清0 10ms, 20s标志位以及20s计数器
        time20sIsOK = 0;
        time20sCounter = 0;
        
        LcdClear();				//清屏
        //音乐选择界面显示初始化
        LcdSetXY(0, 0);
        LcdPutFlashString("CHOOSE MUSIC");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -