发新帖我要提问
12
返回列表
打印
[开源硬件]

【21ic第二届设计大赛】+ 网络双屏桌面显示器

[复制链接]
楼主: springvirus
手机看帖
扫描二维码
随时随地手机跟帖
21
han0097| | 2018-7-28 20:55 | 只看该作者 回帖奖励 |倒序浏览
厉害厉害!

使用特权

评论回复
22
springvirus|  楼主 | 2018-7-29 09:57 | 只看该作者
本帖最后由 springvirus 于 2018-7-29 10:24 编辑

控制NUC505相对简单,只是通过串口发送指令,协议可以灵活制定,数据部分包括今天明天类型字节,天气情况类型字节,最高温,最低温
使用相关软件制作WAV音频文件,存储到TF卡的目录下,路径随意,只要和程序里的获取文件目录保持一致就可以了,NUC505收到指令并解析后,播放对应的音频文件


类型字节和温度数据范围,制定协议供给主从MCU使用,至此,一个相对完整的作品就完成了

视频如下






使用特权

评论回复
23
springvirus|  楼主 | 2018-7-29 10:16 | 只看该作者
本次制作涉及到农行屏的驱动,以及字库的下载和存储,以下帖子有详细介绍,以供参考

M453使用自带RTC并驱动农行金e顺变身桌面小时钟  
https://bbs.21ic.com/icview-2525114-1-1.html

M453通过上位机下载GBK字库到AT45DB321成功
https://bbs.21ic.com/icview-2522292-1-1.html

使用特权

评论回复
24
springvirus|  楼主 | 2018-7-29 10:24 | 只看该作者
解析天气的函数内容如下

void parse_2days_weather(void)
//parse and display
{

        unsigned int i = 0, k = 0;

        unsigned char dis_buf[20] = {0};

        S_RTC_TIME_DATA_T time;

        unsigned int len, offset;

        unsigned char whichday_flag = 0;
       
       

        unsigned char utf[64] = {0};
        unsigned char gbk[64] = {0};

        unsigned char sdata[4] = {0};
       
        unsigned char temp = 0;
       

        CleanLCD();
        CleanLCD_2();


       
        for(i=0;i<uart1_recv_offset;i++)
        {


                if(uart1_recv_buf[i] == 'n' &&
                        uart1_recv_buf[i+1] == 'a' &&
                        uart1_recv_buf[i+2] == 'm' &&
                        uart1_recv_buf[i+3] == 'e')
                {
                        len = 0;
                        offset = 0;

                        memset(utf, 0x00, sizeof(utf));
                        memset(gbk, 0x00, sizeof(gbk));
               
                        while(uart1_recv_buf[i+7+offset] != '"')
                        {
                                utf[offset] = uart1_recv_buf[i+7+offset];
                                offset++;
                                if(offset >= sizeof(utf))
                                {
                                        break;
                                }
                        }
                       
                       
                        SwitchToGbk(utf, offset, gbk, NULL);

                        memset(city_gbk, 0x00, sizeof(city_gbk));       
                        memcpy(city_gbk, gbk, sizeof(gbk));

                        DisplayCity(gbk);

                       

                }



                //english letter's UTF8 is the same as ASCII
                //由于有
                //"last_update"
                //的关键字,所以这里用
                //"date"
                //来过滤
                if(uart1_recv_buf[i] == '"' &&
                        uart1_recv_buf[i+1] == 'd' &&
                        uart1_recv_buf[i+2] == 'a' &&
                        uart1_recv_buf[i+3] == 't' &&
                        uart1_recv_buf[i+4] == 'e' &&
                        uart1_recv_buf[i+5] == '"')
                {
                       
                        time.u32Year = (uart1_recv_buf[i+8]-0x30)*1000 +
                                (uart1_recv_buf[i+9]-0x30)*100 +
                                (uart1_recv_buf[i+10]-0x30)*10 +
                                (uart1_recv_buf[i+11]-0x30)*1;
                       
                        time.u32Month = (uart1_recv_buf[i+13]-0x30)*10 +
                                (uart1_recv_buf[i+14]-0x30)*1;
                       
                       
                        time.u32Day = (uart1_recv_buf[i+16]-0x30)*10 +
                                (uart1_recv_buf[i+17]-0x30)*1;


                        trace("time.year = %d, month = %d, day = %d \r\n",
                                time.u32Year, time.u32Month, time.u32Day);


                        DisplayDate(time);

                        if((i >= 150) && (i <= 250))
                        {
                                whichday_flag = Today;
                                //today
                        }
                        else
                        {
                                whichday_flag = Tomorrow;
                                //tomorrow
                        }

                }


                if(uart1_recv_buf[i] == 't' &&
                        uart1_recv_buf[i+1] == 'e' &&
                        uart1_recv_buf[i+2] == 'x' &&
                        uart1_recv_buf[i+3] == 't' &&
                        uart1_recv_buf[i+4] == '_' &&
                        uart1_recv_buf[i+5] == 'd' &&
                        uart1_recv_buf[i+6] == 'a' &&
                        uart1_recv_buf[i+7] == 'y')
                {
                       
                        len = 0;
                        offset = 0;

                        memset(utf, 0x00, sizeof(utf));
                        memset(gbk, 0x00, sizeof(gbk));
               
                        while(uart1_recv_buf[i+11+offset] != '"')
                        {
                                utf[offset] = uart1_recv_buf[i+11+offset];
                                offset++;
                                if(offset >= sizeof(utf))
                                {
                                        break;
                                }
                        }
                       
                       
                        SwitchToGbk(utf, offset, gbk, NULL);

                       
                        DisplayDayWeather(gbk);
                       

                        if(gbk[0] == Qing_0 && gbk[1] == Qing_1)
                        {
                                sdata[0] = Qing;
                                display1616_2(6, 0, icon_sunny);
                        }
                        else if(gbk[0] == Yin_0 && gbk[1] == Yin_1)
                        {
                                sdata[0] = Yin;
                                display1616_2(6, 0, icon_cloudy);
                        }
                        else if(gbk[0] == Duo_0 && gbk[1] == Duo_1)
                        {
                                sdata[0] = DuoYun;
                                display1616_2(6, 0, icon_cloudy);
                        }
                        else if(gbk[0] == Xiao_0 && gbk[1] == Xiao_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[0] = XiaoYu;
                                display1616_2(6, 0, icon_rainy);
                        }
                        else if(gbk[0] == Zhong_0 && gbk[1] == Zhong_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)                       
                        {
                                sdata[0] = ZhongYu;
                                display1616_2(6, 0, icon_rainy);
                        }
                        else if(gbk[0] == Da_0 && gbk[1] == Da_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[0] = DaYu;
                                display1616_2(6, 0, icon_heavyrainy);
                        }
                        else if(gbk[0] == Bao_0 && gbk[1] == Bao_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[0] = BaoYu;
                                display1616_2(6, 0, icon_heavyrainy);
                        }
                        else if(gbk[0] == Da_0 && gbk[1] == Da_1 &&
                                gbk[2] == Bao_0 && gbk[3] == Bao_1 &&
                                gbk[4] == Yu_0 && gbk[5] == Yu_1)
                        {
                                sdata[0] = DaBaoYu;
                                display1616_2(6, 0, icon_heavyrainy);
                        }
                        else if(gbk[0] == Te_0 && gbk[1] == Te_1 &&
                                gbk[2] == Da_0 && gbk[3] == Da_1 &&
                                gbk[4] == Bao_0 && gbk[5] == Bao_1 &&
                                gbk[6] == Yu_0 && gbk[7] == Yu_1)
                        {
                                sdata[0] = TeDaBaoYu;
                                display1616_2(6, 0, icon_heavyrainy);
                        }
                        else if(gbk[0] == Zhen_0 && gbk[1] == Zhen_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[0] = ZhenYu;
                                display1616_2(6, 0, icon_rainy);       
                        }
                        else if(gbk[0] == Lei_0 && gbk[1] == Lei_1 &&
                                gbk[2] == Zhen_0 && gbk[3] == Zhen_1 &&
                                gbk[4] == Yu_0 && gbk[5] == Yu_1)
                        {
                                sdata[0] = LeiZhenYu;
                                display1616_2(6, 0, icon_leizhen_rainy);
                        }
                        else if(gbk[0] == Bing_0 && gbk[1] == Bing_1 &&
                                gbk[2] == Bao_0 && gbk[3] == Bao_1)
                        {
                                sdata[0] = BingBao;
                                display1616_2(6, 0, icon_rainy);       
                        }
                        else if(gbk[0] == Mai_0 && gbk[1] == Mai_1)
                        {
                                sdata[0] = Mai;
                                display1616_2(6, 0, icon_cloudy);       
                        }
                        else
                        {
                                sdata[0] = 0x00;
                        }

                       
                }


                if(uart1_recv_buf[i] == 't' &&
                        uart1_recv_buf[i+1] == 'e' &&
                        uart1_recv_buf[i+2] == 'x' &&
                        uart1_recv_buf[i+3] == 't' &&
                        uart1_recv_buf[i+4] == '_' &&
                        uart1_recv_buf[i+5] == 'n' &&
                        uart1_recv_buf[i+6] == 'i' &&
                        uart1_recv_buf[i+7] == 'g' &&
                        uart1_recv_buf[i+8] == 'h' &&
                        uart1_recv_buf[i+9] == 't')
                {
                       
                        len = 0;
                        offset = 0;

                        memset(utf, 0x00, sizeof(utf));
                        memset(gbk, 0x00, sizeof(gbk));
               
                        while(uart1_recv_buf[i+13+offset] != '"')
                        {
                                utf[offset] = uart1_recv_buf[i+13+offset];
                                offset++;
                                if(offset >= sizeof(utf))
                                {
                                        break;
                                }
                        }
                       
                       
                        SwitchToGbk(utf, offset, gbk, NULL);

                       
                        DisplayNightWeather(gbk);


                        if(gbk[0] == Qing_0 && gbk[1] == Qing_1)
                        {
                                sdata[1] = Qing;
                                display1616_2(6, 4*16, icon_sunny);
                        }
                        else if(gbk[0] == Yin_0 && gbk[1] == Yin_1)
                        {
                                sdata[1] = Yin;
                                display1616_2(6, 4*16, icon_cloudy);
                        }
                        else if(gbk[0] == Duo_0 && gbk[1] == Duo_1)
                        {
                                sdata[1] = DuoYun;
                                display1616_2(6, 4*16, icon_cloudy);
                        }
                        else if(gbk[0] == Xiao_0 && gbk[1] == Xiao_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[1] = XiaoYu;
                                display1616_2(6, 4*16, icon_rainy);
                        }
                        else if(gbk[0] == Zhong_0 && gbk[1] == Zhong_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[1] = ZhongYu;
                                display1616_2(6, 4*16, icon_rainy);
                        }
                        else if(gbk[0] == Da_0 && gbk[1] == Da_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[1] = DaYu;
                                display1616_2(6, 4*16, icon_heavyrainy);
                        }
                        else if(gbk[0] == Bao_0 && gbk[1] == Bao_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[1] = BaoYu;
                                display1616_2(6, 4*16, icon_heavyrainy);
                        }
                        else if(gbk[0] == Da_0 && gbk[1] == Da_1 &&
                                gbk[2] == Bao_0 && gbk[3] == Bao_1 &&
                                gbk[4] == Yu_0 && gbk[5] == Yu_1)
                        {
                                sdata[1] = DaBaoYu;
                                display1616_2(6, 4*16, icon_heavyrainy);
                        }
                        else if(gbk[0] == Te_0 && gbk[1] == Te_1 &&
                                gbk[2] == Da_0 && gbk[3] == Da_1 &&
                                gbk[4] == Bao_0 && gbk[5] == Bao_1 &&
                                gbk[6] == Yu_0 && gbk[7] == Yu_1)
                        {
                                sdata[1] = TeDaBaoYu;
                                display1616_2(6, 4*16, icon_heavyrainy);
                        }
                        else if(gbk[0] == Zhen_0 && gbk[1] == Zhen_1 &&
                                gbk[2] == Yu_0 && gbk[3] == Yu_1)
                        {
                                sdata[1] = ZhenYu;
                                display1616_2(6, 0, icon_rainy);       
                        }
                        else if(gbk[0] == Lei_0 && gbk[1] == Lei_1 &&
                                gbk[2] == Zhen_0 && gbk[3] == Zhen_1 &&
                                gbk[4] == Yu_0 && gbk[5] == Yu_1)
                        {
                                sdata[1] = LeiZhenYu;
                                display1616_2(6, 0, icon_leizhen_rainy);
                        }
                        else if(gbk[0] == Bing_0 && gbk[1] == Bing_1 &&
                                gbk[2] == Bao_0 && gbk[3] == Bao_1)
                        {
                                sdata[1] = BingBao;
                                display1616_2(6, 0, icon_rainy);       
                        }
                        else if(gbk[0] == Mai_0 && gbk[1] == Mai_1)
                        {
                                sdata[1] = Mai;
                                display1616_2(6, 0, icon_cloudy);       
                        }
                        else
                        {
                                sdata[0] = 0x00;
                        }
                       
                }

                if(uart1_recv_buf[i] == 'h' &&
                        uart1_recv_buf[i+1] == 'i' &&
                        uart1_recv_buf[i+2] == 'g' &&
                        uart1_recv_buf[i+3] == 'h')
                {
                       
                        memset(dis_buf, 0x00, sizeof(dis_buf));

                        //start
                        if(uart1_recv_buf[i+6] == '"')
                        {       
                                //temperature first bit
                                dis_buf[0] = uart1_recv_buf[i+7];
                                if(uart1_recv_buf[i+8] == '"')
                                {
                                        //end

                                }
                                else
                                {
                                        //temperature second bit
                                        dis_buf[1] = uart1_recv_buf[i+8];               
                                }
                        }

                        DisplayHighTemp(dis_buf);

                        if(dis_buf[0] != 0x00)
                        {
                                temp = dis_buf[0] - 0x30;
                                if(dis_buf[1] != 0x00)
                                {
                                        temp = (temp * 10) + (dis_buf[1] - 0x30);
                                }
                        }

                        sdata[2] = temp;
                       
                       
                }


                if(uart1_recv_buf[i] == 'l' &&
                        uart1_recv_buf[i+1] == 'o' &&
                        uart1_recv_buf[i+2] == 'w')
                {
                       
                        memset(dis_buf, 0x00, sizeof(dis_buf));

                        //start
                        if(uart1_recv_buf[i+5] == '"')
                        {       
                                //temperature first bit
                                dis_buf[0] = uart1_recv_buf[i+6];
                                if(uart1_recv_buf[i+7] == '"')
                                {
                                        //end

                                }
                                else
                                {
                                        //temperature second bit
                                        dis_buf[1] = uart1_recv_buf[i+7];

                                       
                                }
                        }

                        DisplayLowTemp(dis_buf);


                        if(dis_buf[0] != 0x00)
                        {
                                temp = dis_buf[0] - 0x30;
                                if(dis_buf[1] != 0x00)
                                {
                                        temp = (temp * 10) + (dis_buf[1] - 0x30);
                                }
                        }

                        sdata[3] = temp;

                       
                }


                //由于含有
                //"wind_direction_degree"的关键字,所以将其过滤掉
                if(uart1_recv_buf[i] == '"' &&
                        uart1_recv_buf[i+1] == 'w' &&
                        uart1_recv_buf[i+2] == 'i' &&
                        uart1_recv_buf[i+3] == 'n' &&
                        uart1_recv_buf[i+4] == 'd' &&
                        uart1_recv_buf[i+5] == '_' &&
                        uart1_recv_buf[i+6] == 'd' &&
                        uart1_recv_buf[i+7] == 'i' &&
                        uart1_recv_buf[i+8] == 'r' &&
                        uart1_recv_buf[i+9] == 'e' &&
                        uart1_recv_buf[i+10] == 'c' &&
                        uart1_recv_buf[i+11] == 't' &&
                        uart1_recv_buf[i+12] == 'i' &&
                        uart1_recv_buf[i+13] == 'o' &&
                        uart1_recv_buf[i+14] == 'n' &&
                        uart1_recv_buf[i+15] == '"')
                {
                       
                        len = 0;
                        offset = 0;

                        memset(utf, 0x00, sizeof(utf));
                        memset(gbk, 0x00, sizeof(gbk));
               
                        while(uart1_recv_buf[i+18+offset] != '"')
                        {
                                utf[offset] = uart1_recv_buf[i+18+offset];
                                offset++;
                                if(offset >= sizeof(utf))
                                {
                                        break;
                                }
                        }
                       
                       
                        SwitchToGbk(utf, offset, gbk, NULL);

                       
                        DisplayWindDirection(gbk);

                }


                if(uart1_recv_buf[i] == 'w' &&
                        uart1_recv_buf[i+1] == 'i' &&
                        uart1_recv_buf[i+2] == 'n' &&
                        uart1_recv_buf[i+3] == 'd' &&
                        uart1_recv_buf[i+4] == '_' &&
                        uart1_recv_buf[i+5] == 's' &&
                        uart1_recv_buf[i+6] == 'p' &&
                        uart1_recv_buf[i+7] == 'e' &&
                        uart1_recv_buf[i+8] == 'e' &&
                        uart1_recv_buf[i+9] == 'd')
                {
                       
                        memset(dis_buf, 0x00, sizeof(dis_buf));

                        //start
                        if(uart1_recv_buf[i+12] == '"')
                        {       
                                //speed first bit
                                dis_buf[0] = uart1_recv_buf[i+13];
                                if(uart1_recv_buf[i+14] == '"')
                                {
                                        //end

                                }
                                else
                                {
                                        //speed second bit
                                        dis_buf[1] = uart1_recv_buf[i+14];

                                       
                                }
                        }

                        DisplayWindSpeed(dis_buf);
                       
                       
                        if(whichday_flag == Today)
                        {
                               
                                nuc505_send_cmd(Today, sdata);
                               

                                for(k = 0; k < 200; k++)
                                {
                                        delay_test(1000*25);
                                }

                                CleanLCD();
                                CleanLCD_2();

                                //切换到明天时,报文中没有城市名了,所以这里使用全局的city_gbk
                                DisplayCity(city_gbk);
                       
                        }
                        else if(whichday_flag == Tomorrow)
                        {
                               
                                nuc505_send_cmd(Tomorrow, sdata);
               
                        }
                       
               
                       
                }

               

        }
       


}


使用特权

评论回复
25
springvirus|  楼主 | 2018-8-2 15:15 | 只看该作者
过来逛逛,哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则