• 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
返回

电子发烧友 电子发烧友

  • 全文搜索
    • 全文搜索
    • 标题搜索
  • 全部时间
    • 全部时间
    • 1小时内
    • 1天内
    • 1周内
    • 1个月内
  • 默认排序
    • 默认排序
    • 按时间排序
大家还在搜
  • 初次接触stm32

    **前言**:因为诸多事情一直耽搁了,原本2020年前本文应当完成,今天抽出时间来弥补先前的失言。初次接触stm32,很重要的切入点便是找准学习的方向和明确学习思路。从宏观来讲stm32作为控制设备

    2021-11-05 07:55

  • 初次接触CCS

    本篇文章,主要面向初次接触CCS的朋友,你可以学到:如何创建工程及选择芯片如何烧录程序如何调试程序如何创建工程及选择芯片点击File->New->CCS Project创建工程在

    2022-02-15 06:51

  • AT指令初次调试

    文章内容硬件准备软件准备AT基础指令初次调试结语硬件准备1.主角:esp8266-012.配角:CH340G USB转TTL模块3.龙套:杜邦线若干4.接线:大部分USB转TTl模块供电不足一般采用

    2022-02-24 06:24

  • 初次接触stm32

    第一次写#初次接触stm32。以前没做过关于硬件开发,觉得自己能力不够,大学专业学的电子信息。工作了两周了,谈一下我对嵌入式开发的认识。1.模糊的认识。大学时关于串口、中断、DMA都学习,现在也是

    2021-08-19 09:37

  • 初次学习MSP430F5529

    CCS9.0导入官方库函数初次学习MSP430F5529,在接触CCS9.0的时候觉得使用寄存器不太方便,在TI官网上查找了下库函数,再添加的时候出现多次的文件包含问题,以下是自己的解决方案,参考了下方博客>

    2022-02-15 06:55

  • CSS(code composer studio)的初次使用

    CSS(code composer studio)的初次使用全国大学生电子设计大赛每10年换一次赞助商,最近都是由德州仪器公司(ti)赞助。作为大赛的赞助商,有一些题目可能会限制只能使用ti公司

    2021-11-29 07:31

  • 给个STM32闪存编程 初次发帖请多指教

    给个STM32闪存编程初次发帖请多指教

    2012-11-01 17:21

  • 初次尝试制作的系统登录

    本帖最后由 starchenzhen 于 2013-10-12 09:32 编辑 简单的用户登录,分普通用户和管理员,权限以100为分割。将用户信息存储excel表中,存储的信息通过加密后存入excel表中,人工打开excel表是无法获取用户信息的,只有初始管理员可以进入管理界面进行添加,修改,删除用户,个人觉得在一般系统中可以运用[hide]初始管理员为admin 密码123 每次程序运行时都会自动检测用户信息是否存在,若不存在,将自动生成一个文件,并存入管理员信息admin,admin[/hide]

    2013-10-11 15:06

  • 初次登录,提供一点资料

    嵌入式初学者的指导文档,少走一些弯路

    2012-05-17 14:46

  • 【P2P物联网试用体验】+初次上电

    本帖最后由 cjf89 于 2016-8-26 11:54 编辑 供电正常连接进入互联网连接完成硬件部分PCB布局:由图中三种颜色的线可以看出该电路板是四层板,该电路板布局美观符合电气规范。原理图:可以看出应用了单片机做主控制器,电源部分经过了滤波及稳压,有七个自定义IO口元器件:从元器件的组成来看,本款产品大量应用了贴片式元器件及半导体,集成度比较高。软件部分:可以看出本款产品的程序比较成熟应用到了,调用子函数,及通过软件防抖和互联网的三次握手程序。#include #include "stdio.h"#include "types.h"#include "STC12C5A.h"#include "zlp2p.h"#include "common_lib.h"#define CMD_LEN36zl_u8 com_cmd_buf[CMD_LEN];//用来指定送往串口1或者2的数据长度字节,和拷贝串口1或2得到的存入缓存内数据的长度// 延续之前的方式状态机#define STATE_00#define STATE_11// 缓冲区char buf_Net2Serial_in[R_BUF_N2SIN_SIZE+1];char buf_Serial2Net_in[R_BUF_S2NIN_SIZE+1];struct SRotateBuf rbuf_Net2Serial_in;struct SRotateBuf rbuf_Serial2Net_in;#if S1_S2_MODE == S1_S2_PROTOCOLchar buf_Net2Serial_out[R_BUF_N2SOUT_SIZE+1];char buf_Serial2Net_out[R_BUF_S2NOUT_SIZE+1];struct SRotateBuf rbuf_Net2Serial_out;struct SRotateBuf rbuf_Serial2Net_out;#endifchar temp_c;//备用,从缓存区读出一个字节数据存入此值中// 发送完毕标志zl_u8 send_over_Serial2Net, send_over_Net2Serial;zl_u8 g_commstart=0;zl_u8 net_recv_flag=0;/* 是否有新的一帧命令从串口收到*/zl_s32 g_commstop_time,g_last_time/* 上一次采样和扫描时间*/;zl_u8 g_state = STATE_0;//ADC相关定义,cpu内部的ad转换器//ADC开发备用。根据需要可以改为别的参数#define ADC_POWER0X80#define ADC_FLAG0X10#define ADC_START 0X08#define ADC_SPEED0X60//以下是板子动作控制,包括继电器,按键,LED灯//端口定义***it PIN_LED1 = P0^0;***it PIN_LED2 = P0^1;***it PIN_LED3 = P0^2;***it PIN_LED4 = P0^3;***it PIN_KEY1 = P0^4;***it PIN_KEY2 = P0^5;***it PIN_KEY3 = P0^6;***it PIN_KEY4 = P0^7;***it PIN_18b20= P2^0;***it PIN_relay= P2^1;//按键发送表zl_u8 key_table[]={'f','g','h','i','1','0'};//按键按下,会输出f1, f2, f3, f4 对应按键1-4按下zl_u8 baundrate_table[]={0xa0/* 1200 */, 0xd0/* 2400 */, 0xe8/* 4800 */, 0xf4/* 9600 */, 0xfa/* 19200 */,0xfd/* 38400 */, 0xfe/* 57600 */, 0xff/* 115200 */};#if S1_S2_MODE == S1_S2_PROTOCOLvoid ProcessingProtocol();void NetRecv();void SerialRecv();#endifextern zl_u8 rbuf_is_empty(struct SRotateBuf DT_XDATA *prbuf) REENTRANT_SIG;extern zl_u8 rbuf_write(struct SRotateBuf DT_XDATA *prbuf, zl_u8 c) REENTRANT_SIG;extern zl_u8 rbuf_read(struct SRotateBuf DT_XDATA *prbuf, zl_u8 DT_XDATA *pc) REENTRANT_SIG;extern void rbuf_init();extern void TRIGER_SERIAL_2_NET_OUT();extern void TRIGER_NET_2_SERIAL_OUT(); extern void NetRecv();extern void SerialRecv();void serial_init(){SCON = 0x50;/* SM0 SM1 =1 SM2 REN TB8 RB8 TI RI */TMOD = 0x20;PCON = 0x80;TH1= baundrate_table[BANDURATE];//在此设置串口1的波特率TCON = 0x40;ES = 1;EA = 1;}void NetSerialInit(){S2CON = 0x50;/* start BRTR, don't set S1BRS = 1(use T1 as serial1 timer) */AUXR = 0x18;AURX1|=0x10;/* 115200 when at 22.1184M */SET_BAUNDRATEx12(baundrate_table[BANDURATE], 0);//在此设置串口2的波特率/* ES2 enalbe */IE2 = 0x01;EA = 1;}void port_init(){ PIN_relay = PIN_LED1= PIN_LED2 = PIN_LED3= PIN_LED4 = 1;//初始化IO端口,释放继电器,关闭LED灯}//LED灯控制///////////////////////////////////////////////////////////////////////////////////////void ctr_io()//继电器闭合发送a1,打开a0;LED1亮b1,灭b0;LED2亮c1,灭c0;LED3亮d1,灭d0;LED1亮e1,灭e0;{switch(com_cmd_buf[0]) {case 'a': {if(com_cmd_buf[1] == '1')PIN_relay = 0;else if(com_cmd_buf[1] == '0')PIN_relay = 1;break;} case 'b':{if(com_cmd_buf[1] == '1')PIN_LED1 = 0;else if(com_cmd_buf[1] == '0')PIN_LED1 = 1;break;} case 'c':{if(com_cmd_buf[1] == '1')PIN_LED2 = 0;else if(com_cmd_buf[1] == '0')PIN_LED2 = 1;break;} case 'd':{if(com_cmd_buf[1] == '1')PIN_LED3 = 0;else if(com_cmd_buf[1] == '0')PIN_LED3 = 1;break; } case 'e':{if(com_cmd_buf[1] == '1')PIN_LED4 = 0;else if(com_cmd_buf[1] == '0')PIN_LED4 = 1;break;} default: ; }}//按键处理函数////////////////////////////////////////////////////////////////////////////////////////////////void key_service()//按键按下,会输出f-g1, 对应按键1-4按下,弹起时会输出f-g0,对应按键1-4{// 按键 key_table[]if(PIN_KEY1 == 0) {DelayWithInstruct(120);//延时120ms,防抖动if(PIN_KEY1 == 0) { rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[0], 1);/*发给主串口,给外界, 函数实参第一个是缓存地址不同的缓存地址代表发往不同处rbuf_Net2Serial_out代表发往串口1,即串口1输出数据;rbuf_Serial2Net_out代表发往串口2,即串口2输出数据给网络,参数2代表要发的数据地址,参数3代表发数据字节数*/rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[4], 1);TRIGER_NET_2_SERIAL_OUT();rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[0], 1);//发给次串口,给网络模块rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[4], 1);TRIGER_SERIAL_2_NET_OUT();while(PIN_KEY1 == 0);//等待按键弹起rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[0], 1);rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[5], 1);TRIGER_NET_2_SERIAL_OUT();rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[0], 1);//发给次串口,给网络模块rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[5], 1);TRIGER_SERIAL_2_NET_OUT();} } if(PIN_KEY2 == 0) {DelayWithInstruct(120);//延时120ms,防抖动if(PIN_KEY2 == 0) {rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[1], 1);rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[4], 1);TRIGER_NET_2_SERIAL_OUT();rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[1], 1);rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[4], 1);TRIGER_SERIAL_2_NET_OUT(); while(PIN_KEY2 == 0);//等待按键弹起rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[1], 1);rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[5], 1);TRIGER_NET_2_SERIAL_OUT();rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[1], 1);//发给次串口,给网络模块rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[5], 1);TRIGER_SERIAL_2_NET_OUT(); } }if(PIN_KEY3 == 0) {DelayWithInstruct(120);//延时120ms,防抖动if(PIN_KEY3 == 0) {rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[2], 1);rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[4], 1);TRIGER_NET_2_SERIAL_OUT();rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[2], 1);rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[4], 1);TRIGER_SERIAL_2_NET_OUT(); while(PIN_KEY3 == 0);//等待按键弹起rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[2], 1);rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[5], 1);TRIGER_NET_2_SERIAL_OUT();rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[2], 1);//发给次串口,给网络模块rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[5], 1);TRIGER_SERIAL_2_NET_OUT();} } if(PIN_KEY4 == 0) {DelayWithInstruct(120);//延时120ms,防抖动if(PIN_KEY4 == 0) {rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[3], 1);rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[4], 1);TRIGER_NET_2_SERIAL_OUT();rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[3], 1);rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[4], 1);TRIGER_SERIAL_2_NET_OUT();while(PIN_KEY4 == 0);//等待按键弹起rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[3], 1);rbuf_write_bulke(&rbuf_Net2Serial_out, &key_table[5], 1);TRIGER_NET_2_SERIAL_OUT();rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[3], 1);//发给次串口,给网络模块rbuf_write_bulke(&rbuf_Serial2Net_out, &key_table[5], 1);TRIGER_SERIAL_2_NET_OUT(); } }}//循环查询处理函数//////////////////////////////////////////////////////////////////////////////////////////////////void ProcessingProtocol(void){zl_u8 ret;SET_WATCH_DOG; switch(g_state){case STATE_0://定时器初始化、IO初始化、ADC初始化、寄存器初始化//进入下一个状态 {Timer_Init();//定时器初始化1ms //Adc_init(); //ADC初始化 port_init(); g_state = STATE_1; break;}case STATE_1: { if(g_commstart == 1 && TimePassed(g_commstop_time, 10)){g_commstart=0;// 处理后清除if(RotateBufDataSize(&rbuf_Serial2Net_in) > 0 ) { // 拷贝出来ret=rbuf_read_bulke(&rbuf_Serial2Net_in, com_cmd_buf, CMD_LEN, FALSE); /*串口1或者2得到的数据先存入缓存中,如buf_Serial2Net_in和 buf_Net2Serial_in,此函数表示从已有数据的缓存中读取数据。其中实参1表示指向这两个缓存的结构体变量,参数2表示,读出数据存储地地址,参数3表示读出长度,参数4表示是否是真读,即缓存数据被出来,这些空间可以继续写数据,如果FALSE测是真读,数据被读出来了,如果是true则是仅仅复制出那些数据,原来缓存数据还存在,这些空间不能被写入新数据*/ctr_io();rbuf_write_bulke(&rbuf_Serial2Net_out, com_cmd_buf, CMD_LEN);TRIGER_SERIAL_2_NET_OUT();}}else if(net_recv_flag==1&& TimePassed(g_commstop_time, 10)) { net_recv_flag=0; if(RotateBufDataSize(&rbuf_Net2Serial_in) > 0 ) {ret=rbuf_read_bulke(&rbuf_Net2Serial_in, com_cmd_buf, CMD_LEN, FALSE); ctr_io(); rbuf_write_bulke(&rbuf_Net2Serial_out, com_cmd_buf, CMD_LEN); TRIGER_NET_2_SERIAL_OUT();}}key_service();}} }//主函数///////////////////////////////////////////////////////////////////////////////////////////////////////////main(){rbuf_init();serial_init();NetSerialInit();while(1){#if S1_S2_MODE == S1_S2_PROTOCOL ProcessingProtocol();#endif}}///////////////////////////////////////////////////////////////////////////////////////////////////////////人机界面:下面是电脑串口通讯调试成功的截图及电脑控制端的截图人机互动:通过发送指定的代码达到继电器闭合及LED1灯开启手机客户端连接上开发板。后续将上传本人的智能家居系统项目,敬请关注!!!

    2016-08-22 14:47