找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2694|回复: 6
收起左侧

51单片机带坐姿纠正智能台灯,求大神指导设计思路

[复制链接]
ID:479932 发表于 2019-3-25 14:55 | 显示全部楼层 |阅读模式
300黑币
想制作这个给家里的小朋友用,原理图,要有坐姿纠正,无人则自动关灯,一定时间后提醒一次注意休息,自动调光,手动调光,定时关闭,求思路

回复

使用道具 举报

ID:283012 发表于 2019-5-11 11:36 | 显示全部楼层
我刚做了一个,坐姿矫正,自动开关灯,一定时间提示,自动手动调光,正好跟我做的一样,你这300黑币我能获取吗?
回复

使用道具 举报

ID:464127 发表于 2019-6-10 14:52 来自手机 | 显示全部楼层
handily 发表于 2019-5-11 11:36
我刚做了一个,坐姿矫正,自动开关灯,一定时间提示,自动手动调光,正好跟我做的一样,你这300黑币我能获 ...

我也想要可以给我看看吗
回复

使用道具 举报

ID:283012 发表于 2020-1-22 09:57 | 显示全部楼层
爱你知道不起 发表于 2019-6-10 14:52
我也想要可以给我看看吗

好久没上这个网站了,怎么分享给你?/
回复

使用道具 举报

ID:283012 发表于 2020-1-22 09:59 | 显示全部楼层
爱你知道不起 发表于 2019-6-10 14:52
我也想要可以给我看看吗

void ALLINIT()
{
        SystemInit();                                       
        SysTick_Init(72);//72MSysTick_Init(72);//72M
        USART1_Init(115200);
        usart3_init(9600);  //′®¿ú33õê¼»ˉÎa9600
        KEY_Init();
        SR501_Init();
        LED_Init();
        TIM1_PWM_Init(); //TIM1 PWM??????,???TIM1 PWM??
        ADC1_Init();
        if(Display_Init()) Select_cpt=1;
        DS1302_config();
        ds1302_init();//DS13023õê¼»ˉ
        ds1302_read_time();
        ds1302_write_time(); //D′èë3õê¼Öμ
        while(DHT11_Init())
        {
                u3_printf("DHT11 Error ! \r\n");
                delay_ms(1000);
        }
        TIM2_NVIC_Configuration(); // TIM2 ¶¨ê±ÅäÖÃ
        TIM2_Configuration();        
        Ultrasonic_Config();//3¬éù2¨¶Ë¿ú3õê¼»ˉ
//        Color_Test();
    TIM4_Init(10000-1,7199);                    
}  
#include "public.h"
#include "Init.h"
u8 humi_num1;
volatile u32 time; // ms ¼Æê±±äá¿
int main()
{       
        ALLINIT();       
        u3_printf("System init OK!\r\n");
        di_di();
        while(1)
        {
//        u3_printf("%d \r\n",time_0);       
        Mode_Selection();       
//                        if(SR501_data==1)GPIO_SetBits(GPIOC, GPIO_Pin_13 );       
        }
}
#include "Display.h"
#include "public.h"

u8 Select_cpt=0,mode=0,Second=0,First=0;
u16 ADvalue_PA6=0,ADvalue_PA5=0,ADvalue_PA7=0,ADvalue_temp=0;
u8 temp_MCU=0,AD_PA5=0,AD_PA5_Per=0;
extern __IO u16 ADC_ConvertedValue[4];       
Site ASite={6,30};
Site SSite={6,30};
       
void (*p)(void);
void *Mode_Main(void);
void *Mode_First(void);
void *Mode_Second(void);
void *Mode_Third(void);
void *Mode_Fourth(void);
void *Mode_Fifth(void);






u8 Display_Init(void)
{
        Lcd_Init();
//        Color_Test();
        Lcd_Clear(BLACK);
        p=&Mode_Main;
        p();
       
        return 1;
}



static u8 lightmove(Site *site)
{
        u8 mode,Dis_set=10;
        u16 ymax,ymin;
        u8 dang1=0,pwm1=0;
       
        while(Select_cpt==1)
        {
                if(p==Mode_Main) //éèÖüyí·éÏÏÂÏT
                {
                        ymin=30;
                        ymax=75;
                }
//                else if(p==Mode_Second)
//                {
//                        ymin=0;
//                        ymax=90;
//                }
       
                if(p==Mode_Main)//Ö÷Æá2ù×÷
                {
                        DS1302_TX();//ê±¼ä èÕÆú    DATDèòaéÏà-μç×è
                        DHT11_TX();
                        Ultrasonic_TX();
                        LCD_ShowxNum(66,90,&time_2,4);       
                        Gui_DrawFont_GBK16(99,90,YELLOW,BLACK,"s");                               
                        if(KEY_U==0)
                        {
                                delay_ms(10);
                                if(KEY_U==0)
                                {
                                while(KEY_U==0);
                                site->y-=15;
                                Lcd_Clear_c16(BLACK,site->x,site->y+15,2);
                                if(site->y<ymin) site->y=ymax;
                                Gui_DrawFont_GBK16(site->x,site->y,YELLOW,BLACK,"->");               
                                }
                        }
                        if(KEY_D==0)
                        {
                                delay_ms(10);
                                if(KEY_D==0)
                                {
                                        while(KEY_D==0);
                                        site->y+=15;
                                        Lcd_Clear_c16(BLACK,site->x,site->y-15,2);
                                        if(site->y>ymax) site->y=ymin;
                                        Gui_DrawFont_GBK16(site->x,site->y,YELLOW,BLACK,"->");       
                                }
                        }                       
                        if(KEY_R==0)
                          {                       
                                        switch(site->y)
                                        {
                                                case 30:mode=0;
                                                        break;
                                                case 45:mode=1;
                                                        break;
                                                case 60:mode=2;
                                                        break;
                                                case 75:mode=3;
                                                        break;
                                                case 90:mode=4;
                                                        break;                               
                                                default:
                                                        break;
                                        }
                                        return mode;
                                }
                                else if(KEY_L==0)
                                {
                                        Lcd_Clear(BLACK);
                                        p=&Mode_Main;
                                        ASite.y=30;
                                        p();
                                        break;
                                }
                }
                else if(p==Mode_First)//ò»¼¶Æá2ù×÷
                {
                        First=1;
                        while(First==1)
                        {                                       
                                if(KEY_U==0)
                                {       
                                        while(KEY_U==0);
                                        dang1+=1;
                                }
                                if(KEY_D==0)
                                {
                                        while(KEY_D==0);
                                        dang1-=1;
                                }
                                if(dang1>6)  dang1=0;
                                if(dang1<0)  dang1=6;                               
                                Gui_DrawFont_Num32(40,20,YELLOW,BLACK,dang1) ;
                                switch(dang1)
                                        {
                                                case 0:TIM1->CCR1 = 10*(100-100);                               
                                                        break;
                                                case 1:TIM1->CCR1 = 10*(100-90);                               
                                                        break;
                                                case 2:TIM1->CCR1 = 10*(100-80);                       
                                                        break;
                                                case 3:TIM1->CCR1 = 10*(100-60);               
                                                        break;
                                                case 4:TIM1->CCR1 = 10*(100-40);       
                                                        break;
                                                case 5:TIM1->CCR1 = 10*(100-20);               
                                                        break;
                                                case 6:TIM1->CCR1 = 10*(100-0);
                                                        break;
                                        }       
       
                                       
                                if(KEY_L==0)
                                {
                                        First=0;
                                        Lcd_Clear(BLACK);
                                        p=&Mode_Main;
                                        ASite.y=30;
                                        p();
                                }
                        }
                }
                else if(p==Mode_Second)//¶t¼¶Æá2ù×÷
                {
                        First=1;time_0=0;
                        while(First==1)
                        {
                                /******1¤×÷걼䣬¾Ã×øìáDÑ********/                       
                                if(KEY_U==0)time_1+=5;                               
                                if(KEY_D==0)time_1-=1;                                                       
                                Gui_DrawFont_GBK16(5,95,YELLOW,BLACK,"Time_Set:");
                                Gui_DrawFont_GBK16(112,95,YELLOW,BLACK,"s");
                                LCD_ShowxNum(79,95,&time_1,4);
                                Gui_DrawFont_GBK16(5,110,YELLOW,BLACK,"Time_Now:");
                                Gui_DrawFont_GBK16(112,110,YELLOW,BLACK,"s");
                                LCD_ShowxNum(79,110,&time_0,4);
                                if(time_0>time_1)
                                {
//                                GPIO_SetBits(GPIOC, GPIO_Pin_13 );       
//                                        Lcd_Clear(BLACK);
                                }
                                ADvalue_PA5=Get_ADC_Average(0,20);
                                AD_PA5=ADvalue_PA5*256/65536;
                                AD_PA5_Per=100-AD_PA5*6.7;if(AD_PA5_Per>93) AD_PA5_Per=93;
                                Gui_DrawFont_GBK16(5,5,YELLOW,BLACK,"Gui Yi Light:");
                                Gui_DrawFont_GBK16(20,20,YELLOW,BLACK,"G_Y:");
                                LCD_ShowxNum(55,20,&AD_PA5,2);
                                Gui_DrawFont_GBK16(20,35,YELLOW,BLACK,"B_F:");
                                LCD_ShowxNum(55,35,&AD_PA5_Per,2);
                                Gui_DrawFont_GBK16(73,35,YELLOW,BLACK,"%");
                               
                                if(KEY_U==0)u3_printf("ad1(A5): %d \r\n",ADvalue_PA5);//A5
                                switch(AD_PA5)
                                        {
                                                case 0:TIM1->CCR1 = 10*(100-100);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,0) ;                       
                                                        break;
                                                case 1:TIM1->CCR1 = 10*(100-100);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,0) ;               
                                                        break;
                                                case 2:TIM1->CCR1 = 10*(100-92);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,1) ;       
                                                        break;
                                                case 3:TIM1->CCR1 = 10*(100-85);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,1) ;       
                                                        break;
                                                case 4:TIM1->CCR1 = 10*(100-77);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,2) ;       
                                                        break;
                                                case 5:TIM1->CCR1 = 10*(100-70);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,2) ;       
                                                        break;
                                                case 7:TIM1->CCR1 = 10*(100-63);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,3) ;       
                                                        break;
                                                case 8:TIM1->CCR1 = 10*(100-56);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,3) ;               
                                                        break;
                                                case 9:TIM1->CCR1 = 10*(100-49);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,4) ;       
                                                        break;
                                                case 10:TIM1->CCR1 = 10*(100-42);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,4) ;       
                                                        break;
                                                case 11:TIM1->CCR1 = 10*(100-35);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,5) ;       
                                                        break;
                                                case 12:TIM1->CCR1 = 10*(100-27);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,5) ;       
                                                        break;
                                                case 13:TIM1->CCR1 = 10*(100-21);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,6) ;       
                                                        break;
                                                case 14:TIM1->CCR1 = 10*(100-14);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,7) ;       
                                                        break;
                                                case 15:TIM1->CCR1 = 10*(100-7);                        Gui_DrawFont_Num32(40,60,YELLOW,BLACK,8) ;       
                                                        break;
                                                       
                                        }               
                       
                        if(KEY_L==0)
                        {
                                First=0;
                                Lcd_Clear(BLACK);
                                p=&Mode_Main;
                                ASite.y=30;
                                p();
                        }
                        }
                }
                else if(p==Mode_Third)//èy¼¶Æá2ù×÷
                {
                        First=1;
                        while(First==1)
                        {       
                                 if(KEY_U==0)
                                  {
                                        delay_ms(100);
                                         if(KEY_U==0)
                                        {
//                                          while(KEY_U==0);
                                                pwm1-=2;if(pwm1<=1)pwm1=99;
                                        }
                                  }
                                else if(KEY_D==0)
                                  {
                                        delay_ms(100);
                                        if(KEY_D==0)
                                        {
//                                         while(KEY_D==0);
                                        pwm1+=2;if(pwm1>=99)pwm1=1;
                                        }
                                  }                           
                                TIM1->CCR1 = 10*(100-pwm1);
                                if(KEY_R==0)
                                {       
                                        if(KEY_R==0)
                                        {
                                                u3_printf("PWM: %d %%\r\n",pwm1);
                                        }
                                }                                   
                                if(KEY_L==0)
                                {
                                        First=0;
                                        Lcd_Clear(BLACK);
                                        p=&Mode_Main;
                                        ASite.y=30;
                                        p();
                                }
                        }
                }
                else if(p==Mode_Fourth)//Ëļ¶Æá2ù×÷
                {
                        Ultrasonic_TX();
                        if(KEY_U==0)Dis_set++;
                        if(Dis_set>99)Dis_set=10;                       
                        if(Distance<Dis_set&&SR501_data==1)
                        {
//                                Color_Test();
                                GPIO_SetBits(GPIOC, GPIO_Pin_13 );       
                        }
                        else GPIO_ResetBits(GPIOC, GPIO_Pin_13 );       
                        Gui_DrawFont_GBK16(5,5,YELLOW,BLACK,"Dis_set:");
                        LCD_ShowxNum(55,20,&Dis_set,2);
                        Gui_DrawFont_GBK16(85,5,YELLOW,BLACK,"cm");
                        if(KEY_L==0)
                        {
                                Lcd_Clear(BLACK);
                                p=&Mode_Main;
                                ASite.y=30;
                                p();
                        }
                       
                }
//                else if(p==Mode_Fifth)//Î弶Æá2ù×÷
//                {                       
//                        if(KEY_L==0)
//                        {
//                                Lcd_Clear(BLACK);
//                                p=&Mode_Main;
//                                ASite.y=30;
//                                p();
//                        }       
//                }
        }
       
        return -1;
}

void *Mode_Main(void)
{
        Gui_DrawFont_GBK16(6,30,YELLOW,BLACK,"->");
        Gui_DrawFont_GBK16(24,30,YELLOW,BLACK,"Man-Contr");
        Gui_DrawFont_GBK16(24,45,YELLOW,BLACK,"Auto-Contr");
        Gui_DrawFont_GBK16(24,60,YELLOW,BLACK,"Casual-Contr");
//        Gui_DrawFont_GBK16(24,75,YELLOW,BLACK,"Mode 4:");
//        Gui_DrawFont_GBK16(24,90,YELLOW,BLACK,"Mode 5:");       
//        LCD_ShowNum(24,20,1,2,12);
//        LCD_ShowChar(24,50,1,12);
}

void *Mode_First(void)
{
        Lcd_Clear(BLACK);       
       
}

void *Mode_Second(void)
{
        Lcd_Clear(BLACK);
}

void *Mode_Third(void)
{
        Lcd_Clear(BLACK);
        Gui_DrawFont_GBK16(40,30,YELLOW,BLACK,"Up:+");
        Gui_DrawFont_GBK16(40,45,YELLOW,BLACK,"Down:-");
}

void *Mode_Fourth(void)
{
        Lcd_Clear(BLACK);       
}

void *Mode_Fifth(void)
{
        Lcd_Clear(BLACK);       
}

void Mode_Selection(void)
{       
       
        switch(lightmove(&ASite))
        {
            case mode1: p=&Mode_First;ASite.y=0;p();
                        break;
                case mode2: p=&Mode_Second;p();
                        break;
                case mode3: p=&Mode_Third;ASite.y=0;p();
                        break;
                case mode4: p=&Mode_Fourth;p();
                        break;
                case mode5: p=&Mode_Fifth;ASite.y=0;p();
                        break;
               
                default:
                        break;
        }
       
}

void Time_W()
{
Lcd_Clear(BLACK);

}

回复

使用道具 举报

ID:739217 发表于 2020-5-11 00:24 来自手机 | 显示全部楼层
handily 发表于 2019-5-11 11:36
我刚做了一个,坐姿矫正,自动开关灯,一定时间提示,自动手动调光,正好跟我做的一样,你这300黑币我能获 ...

求教,有原理图和pcb图嘛
回复

使用道具 举报

ID:758116 发表于 2020-5-22 12:54 | 显示全部楼层
handily 发表于 2019-5-11 11:36
我刚做了一个,坐姿矫正,自动开关灯,一定时间提示,自动手动调光,正好跟我做的一样,你这300黑币我能获 ...

我也想要可以看看吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表