查看: 3790|回复: 8

[原创] 【高校争霸赛】智能新型插座(3)——软件设计(1)

[复制链接]
  • TA的每日心情
    郁闷
    2021-3-10 19:44
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    126

    主题

    525

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2018
    最后登录
    2023-12-25
    发表于 2016-11-29 12:55:25 | 显示全部楼层 |阅读模式
    本帖最后由 MDebug 于 2016-11-29 13:08 编辑

    今天主要是做下位机程序以及设计思路。
    此系统软件主要分为四个部分:参数显示、电能监测、WIFI通信。软件启动之后通过电源模块的处理,给系统MCU供电,然后通过LT135检测相关电能参数,同时将检测参数做相应显示。当发生过载、过压等危险情况时,直接将总继电器断开。整个系统通过WIFI模块与外界建立连接,当连接建立后,通过手机端软件对总继电器和各个分继电器进行相应的控制。
    软件系统最大的特点是区分了主从关系,即过载保护作为主要控制,如果串口监测到过载电流,即判断为非正常操作,继电器始终作为断开状态,在手机端的控制始终不予以响应,以避免危险情况的发生。只有当功率保护正常工作时,整个系统的其他部分才能正常工作。当与手机建立通信时,手机端能同时控制总继电器和各个分继电器,以便达到最安全的控制。
    软件整体设计思路:
    2.jpg
    下面是LT135和KEY的代码

    1. <font face="新宋体">/***********************************华丽的分割线**********************************/
    2. /*
    3. 01 03 20     //命令字
    4. </font>   <font face="新宋体">
    5. 00 36 C8 B3  //电压 / 10000
    6. 00 02 95 E9  //电流 / 10000
    7. 00 00 00 00  //有功功率  / 10000
    8. 00 08 10 74  //有功总电能 / 10000
    9. 00 00 00 00  //功率因数 / 1000
    10. 00 06 54 98  //二氧化碳排放量  / 10000
    11. FE 7E 20 02  //温度(保留)
    12. 00 00 02 AA  //频率 / 100

    13. A5 50        //CRC校验和
    14.         37BYTE
    15. */
    16. /***********************************华丽的分割线**********************************/


    17. #include "lt135.h"

    18. unsigned int Uart1_Rx=0;
    19. u8 OD[8]={0x01,0x03,0x00,0x48,0x00,0x08,0xC4,0x1A};
    20. unsigned int Voltage=0;                                        //电压
    21. unsigned int Current=0;                                        //电流
    22. unsigned int Active_Power=0;                //有功功率
    23. unsigned int Electric_Energy=0;        //有功总电能
    24. unsigned int Power_Factor=0;                //功率因数
    25. unsigned int CO2_Emissions=0;   //二氧化碳排放量
    26. unsigned int Frequency=0;       //频率
    27. unsigned int shi,ge;
    28. unsigned char Data[4]={0x00,0x00,0x00,0x00};

    29. /************************数据格式转换******************************/
    30. void int_to_hex(unsigned int data)
    31.         {
    32.                 Data[0]=48+data/1000;                                                                                                                                                         //千位
    33.                 Data[1]=48+(data-(Data[0]-48)*1000)/100;                                                                         //百位
    34.                 Data[2]=48+(data-(Data[0]-48)*1000-(Data[1]-48)*100)/10;         //十位
    35.                 Data[3]=48+(data-(Data[0]-48)*1000-(Data[1]-48)*100)%10;   //个位
    36.                 if((Data[0]==48)&&(Data[1]!=48)) Data[0]=32;
    37.                 if((Data[0]==48)&&(Data[1]==48)&&(Data[2]!=48))
    38.                 {
    39.                         Data[0]=32;
    40.                         Data[1]=32;
    41.                 }
    42.                 if((Data[0]==48)&&(Data[1]==48)&&(Data[2]==48)&&(Data[3]!=48))
    43.                 {
    44.                         Data[0]=32;
    45.                         Data[1]=32;
    46.                         Data[2]=32;
    47.                 }
    48.                 if((Data[0]==48)&&(Data[1]==48)&&(Data[2]==48)&&(Data[3]==48))
    49.                 {
    50.                         Data[0]=32;
    51.                         Data[1]=32;
    52.                         Data[2]=32;
    53.                         Data[3]=32;
    54.                 }
    55. }
    56. /********************************************************************/


    57. /***********************串口数据处理**********************************/
    58. void UART1_SendData(u8 *Data)//电表数据Command
    59. {
    60.         int i=0;
    61.         for(i=0;i<8;i++)  
    62.         {
    63.                 USART_SendData(USART1,Data[i]);
    64.                 while(USART_Get(USART1)!=1);//等待发送结束
    65.   }
    66. }
    67. /********************************************************************/


    68. /***********************电表数据读取*********************************/
    69. void read_Electric(void)               
    70. {
    71.         Voltage=(((USART_RX_BUF[3]<<24)|(USART_RX_BUF[4]<<16)|(USART_RX_BUF[5]<<8)|(USART_RX_BUF[6]))/10000);
    72.         Current=(((USART_RX_BUF[7]<<24)|(USART_RX_BUF[8]<<16)|(USART_RX_BUF[9]<<8)|(USART_RX_BUF[10]))/10000);
    73.         Active_Power=(double)((USART_RX_BUF[11]<<24)|(USART_RX_BUF[12]<<16)|(USART_RX_BUF[13]<<8)|(USART_RX_BUF[14]))/(double)10000/(double)3.0403;
    74.         Electric_Energy=(((USART_RX_BUF[15]<<24)|(USART_RX_BUF[16]<<16)|(USART_RX_BUF[17]<<8)|(USART_RX_BUF[18]))/10000);               
    75.         Power_Factor=(((USART_RX_BUF[19]<<24)|(USART_RX_BUF[20]<<16)|(USART_RX_BUF[21]<<8)|(USART_RX_BUF[22]))/1000);               
    76.         CO2_Emissions=(((USART_RX_BUF[23]<<24)|(USART_RX_BUF[24]<<16)|(USART_RX_BUF[25]<<8)|(USART_RX_BUF[26]))/10000);
    77.         Frequency=(((USART_RX_BUF[31]<<24)|(USART_RX_BUF[32]<<16)|(USART_RX_BUF[33]<<8)|(USART_RX_BUF[34]))/100);        

    78. </font>        <font face="新宋体">
    79. }




    80. </font>
    复制代码
    按键模块:
    1. <font face="新宋体">#include "key.h"
    2. #include "sys.h"
    3. #include "delay.h"
    4. //////////////////////////////////////////////////////////////////////////////////         
    5. //山东交通学院
    6. //MDebug
    7. //////////////////////////////////////////////////////////////////////////////////  
    8. //按键初始化函数
    9. void KEY_Init(void) //IO初始化
    10. {
    11.     Chip_GPIO_Init(LPC_GPIO_PORT);                     
    12.     Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 12, false);      
    13.     Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0,2, false);  
    14.     Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0,4, false);      
    15. }
    16. //按键处理函数
    17. //返回按键值
    18. //mode:0,不支持连续按;1,支持连续按;
    19. //0,没有任何按键按下
    20. //1,KEY0按下
    21. //2,KEY1按下
    22. //3,KEY2按下
    23. //4,KEY3按下 WK_UP

    24. u8 KEY_Scan(u8 mode)
    25. {         
    26.         static u8 key_up=1;//按键按松开标志
    27.         if(mode)key_up=1;  //支持连按                  
    28.         if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
    29.         {
    30.                 delay_ms(10);//去抖动
    31.                 key_up=0;
    32.                 if(KEY0==0)return 1;
    33.                 else if(KEY1==0)return 2;
    34.                 else if(KEY2==0)return 3;
    35.                 else if(KEY3==1)return 4;
    36.         }else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;            
    37.          return 0;// 无按键按下</font>
    复制代码




    很开心
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-24 08:47
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2016-11-29 13:14:46 | 显示全部楼层
    厉害                          
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16702
    最后登录
    1970-1-1
    发表于 2016-11-29 15:27:16 | 显示全部楼层
    很详细
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 2090 天

    连续签到: 5 天

    [LV.Master]伴坛终老

    65

    主题

    8397

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    14182
    最后登录
    2025-7-21
    发表于 2016-11-29 16:19:03 | 显示全部楼层
    不错不错   
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-5 08:29
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    107

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    338
    最后登录
    2018-1-4
    发表于 2016-11-29 16:53:08 | 显示全部楼层

    不错不错   ,很详细
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-5-24 10:39
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    140

    主题

    2087

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3913
    最后登录
    2020-5-24
    发表于 2016-11-29 21:17:46 | 显示全部楼层
    谢谢分享学习一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-24 08:30
  • 签到天数: 50 天

    连续签到: 1 天

    [LV.5]常住居民I

    22

    主题

    817

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1713
    最后登录
    2019-12-7
    发表于 2016-11-29 21:19:24 | 显示全部楼层
    谢谢分享,
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-21 08:52
  • 签到天数: 861 天

    连续签到: 1 天

    [LV.10]以坛为家III

    75

    主题

    2523

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5867
    最后登录
    2025-1-22
    发表于 2016-11-30 01:55:40 | 显示全部楼层
    非常好的创意
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-27 14:12
  • 签到天数: 41 天

    连续签到: 1 天

    [LV.5]常住居民I

    2

    主题

    147

    帖子

    0

    高级会员

    Rank: 4

    积分
    510
    最后登录
    2018-1-16
    发表于 2016-11-30 08:41:05 | 显示全部楼层
    不错的说
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 10:21 , Processed in 0.108522 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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