当前位置: 首页 > news >正文

外贸婚纱网站移动端开发需要什么技术

外贸婚纱网站,移动端开发需要什么技术,建站宝盒视频,伏羲方舟网站建设下面是一个案例需求#xff1a; 1、编写一段程序,该程序的主要功能是监控电路板上的电压值,若电压值超过当前的电压限制则通过蜂鸣器报警,通过按键解除报警; 2、其具体要求如下; a) 程序下载20s后,进入电压采集状态(使用RTC ALARM功能完成), 要求1s采集1次电路板电压值;(采用… 下面是一个案例需求 1、编写一段程序,该程序的主要功能是监控电路板上的电压值,若电压值超过当前的电压限制则通过蜂鸣器报警,通过按键解除报警; 2、其具体要求如下;  a) 程序下载20s后,进入电压采集状态(使用RTC ALARM功能完成), 要求1s采集1次电路板电压值;(采用RTC TIME TICK完成) b) 每次电压采集完成后,通过COM2将采集到的电压值发送到PC,在PC端可通过串口调试助手查看当前的电压值; c) 每次电压采集完成后,比较当前的电压值是否正常正常的电压值为(1V~2V),若当前采集的电压值异常,则通过蜂鸣器发出报警信号; d) 报警信号的解除通过电路板上的KEY2控制( 通过按下KEY2使蜂鸣器停止鸣叫); 下面是具体实现 1、头文件定义 0) -- exynos_4412.h 内容过多这里不予以展示了在前面的文章中均可找到相关寄存器定义 1) -- adc.h [cpp] view plaincopy #ifndef __ADC_H_   #define __ADC_H_      void adc_init(int temp);   void adc_collect(void);      #endif   2) -- key.h [cpp] view plaincopy #ifndef _KEY_H_   #define _KEY_H_      void key2_init(void);      #endif   3) -- pwm.h [cpp] view plaincopy #ifndef __PWM_H__   #define __PWM_H__      void pwm_init(void);   void beep_on(void);   void beep_off(void);   #define SYS_SET_FREQUENCE 25000   void beep_set_frequence( unsigned int fre );      #endif   4) -- rtc.h [cpp] view plaincopy #ifndef _RTC_H_   #define _RTC_H_      void rtc_init(void);   void rtc_tic(void);   void rtc_alarm(void);      #endif   5) -- uart.h  [cpp] view plaincopy #ifndef _UART_H   #define _UART_H      void putc(const char data);   void puts(const  char  *pstr);   void uart_init(void);      extern void putc(const char data);   extern void puts(const  char  *pstr);   extern void uart_init(void);      #endif   2、具体函数实现: 1) -- adc.c [cpp] view plaincopy /*   * adc.c   *   *  Created on: 2016-2-29   *      Author: Administrator   */   #include exynos_4412.h      //ADC初始化函数   adc_init(int temp)   {       // 初始化A/D控制寄存器       // ADCCON [16]位置1,12bit输出[14]位置1允许预分频 [13:6]  99,预分频值为99       // [1]位置1,采用读启动方式启动ADC       // A/D转换时间计算 PCLK  100 MHZ,PRESCALER  99,则 12 位转换时间为 100MHz/(991)  1 MHZ       ADCCON  (1  16 | 1  14 | 99 6 | 1  1);       ADCMUX  3; //电压输入通道选择查看原理图ADC连接 XadcAIN3这里将ADCMUX  3;       temp  ADCDAT  0xfff; // temp用于存放转换的数据值由于是读启动方式启动ADC第一次读是读不到正确值的                              // 所以这里先读取依次进行初始化。   }      //ADC 采集函数   adc_collect()   {       unsigned int temp;       adc_init(temp);          while(!(ADCCON  (1  15))); //读取ADCCON [15]位当其为1时A/D转换结束       temp  ADCDAT  0xfff; // 读取ADCDAT低12位获取电压值       temp  18 * 100 * temp/0xfff; // 电压转换公式电压最大值为1.8Vtemp 范围为 0 ~ 4096                                     // 由于没有浮点型头文件这里不识别浮点型这里将其转换成mv,                                     // 其实应该是 1.8*1000*temp/0xfff但1.8不被识别这里用18*100 。       printf(电压值  %d mV\n,temp);       if((temp  2000)||(temp  1000)) // 这里设正常值为 1000mv ~ 2000mV。       {           printf(电压异常\n);           beep_on(); //电压值异常时蜂鸣器报警       }       else       {           beep_off(); // 如果调整到正常值关闭蜂鸣器。       }   }   2) -- key.c [cpp] view plaincopy /*   * key.c   *   *  Created on: 2016-2-29   *      Author: Administrator   */      #include exynos_4412.h      //按键中断 初始化函数   key2_init()   {       //1、 外设级寄存器设置       GPX1.CON GPX1.CON  (~(0xf  4)) |(0xf  4); //配置引脚功能为外部中断这里key2所连引脚为CPX1_1       GPX1.PUD  GPX1.PUD  (~(0x3  2));  //关闭上下拉电阻          EXT_INT41_CON  EXT_INT41_CON (~(0xf  4))|(0x2  4); //外部中断触发方式       EXT_INT41_MASK  EXT_INT41_MASK  (~(0x1  1));  //使能中断          // 2、GIC级寄存器设置       // 使能分配器       ICDDCR  1;       // 使能相应中断到分配器ICDISER每1bit控制一中断源       // EINT[9]中断号为57在ICDISER1 第[25]位置1       ICDISER.ICDISER1  ICDISER.ICDISER1 | (0x1  25);       // ICDIPTR每8位表示一中断源对应的CPU接口所以一个ICDIPTR控制4个中断源       // 这里中断号57在ICDPTR14 第[15:8]设置       ICDIPTR.ICDIPTR14  ICDIPTR.ICDIPTR14  (~(0xff  8))|(0x1  8); //选择CPU接口          //3、CPU0级寄存器设置       CPU0.ICCPMR  255; //中断屏蔽优先级       CPU0.ICCICR  1;   //使能中断到CPU   }   3) -- pwm.c [cpp] view plaincopy #include exynos_4412.h   #include pwm.h      // 蜂鸣器函数配置这里蜂鸣器是无源的由PWM定时器控制管脚为GPD0_0   void pwm_init(void)   {       GPD0.CON  GPD0.CON  (~(0xf))| (0x2  0); //GPD0_0 由 GPD0.CON [3:0]控制置2为TOUT_0       GPD0.PUD  GPD0.PUD  (~(0xf)) ; //禁用上拉/下拉电阻          //定时器配置这里使用定时器0       // 1、设置预分频值范围为0~255这里设为249       PWM.TCFG0  PWM.TCFG0  (~(0xff))|0xf9;       // 2、设置分频器分频值有1、1/2、1/4、1/8、1/16 五种因子选择       // TCFG1 [3:0]用于配置Time0这里置2选择分频值为1/4       PWM.TCFG1  PWM.TCFG1  (~(0xf)) | 0x2; // 分频后 f  100MHz/(250)/4  100kHz       //3、TCMPB0 TCNTB0 配合进行占空比设置       // 定时器计数缓冲寄存器TCNTBn把计数器初始值下载到递减计数器中。       // 定时器比较缓冲寄存器TCMPBn把其初始值下载到比较寄存器中       // 并将该值与递减计数器的值进行比较。当递减计数器和比较寄存器值相同时输出电平翻转。       // 递减计数器减至0后输出电平再次翻转完成一个输出周期。       // 这里将 TCMPB0设置为50TCNTB0设为100占空比为50%。       PWM.TCMPB0  50;       PWM.TCNTB0  100;       // 4、启动Time0,且第一次要手动更新将TCMPB0和TCNTB0的值加载进递减计数器       PWM.TCON  PWM.TCON  (~(0xff)) | (1  0) | (1  1) ;   }      // 开启蜂鸣器   void beep_on(void)   {       PWM.TCON  PWM.TCON  (~(0xff)) | (1  0) | (1  3) ; //自动加载TCMPB0和TCNTB0的值   }      //关闭蜂鸣器   void beep_off(void)   {       PWM.TCON  PWM.TCON  (~(1  0)) ; //[0]位置0关闭定时器0   }      //#define SYS_SET_FREQUENCE 25000   void beep_set_frequence( unsigned int fre )   {       //若蜂鸣器的发声频率为0则返回       if( 0fre )           return ;          PWM.TCMPB0   SYS_SET_FREQUENCE/(frefre);   //根据设定频率重新设定计数器比较的值       PWM.TCNTB0   SYS_SET_FREQUENCE/fre;            //根据频率重新调整计数值      }   4) -- rtc.c [cpp] view plaincopy /*   * rtc.c   *   *  Created on: 2016-2-29   *      Author: Administrator   */   #include exynos_4412.h      //RTC初始化函数   void rtc_init(void)   {       RTCCON  1; // RTC控制使能       // 通过设置 BCD系列寄存器的值对年月日时分秒进行配置       RTC.BCDYEAR  0x16;       RTC.BCDMON  0x2;       RTC.BCDDAY  0x29;       RTC.BCDHOUR  0x18;       RTC.BCDMIN  0x24;       RTC.BCDSEC  0x00;       RTCCON  0; //RTC控制禁止   }      // 滴答计时器配置   void rtc_tic(void)   {       // RTCCON [7:4]用于设置滴答计时器子时钟源选择这里设为 0000即32768Hz       // RTCCON [8] 置1滴答计时器使能       RTCCON  RTCCON  (~(0xf  4)) | (1  8);       // 配置TICCNT寄存器这里设置为32768时钟源为32768Hz, 1s发生一次中断。       TICCNT  32768;          ICDDCR  1;  //使能分配器       ICDISER.ICDISER2  ICDISER.ICDISER2 | (0x1  13); //使能相应中断到分配器       ICDIPTR.ICDIPTR19  ICDIPTR.ICDIPTR19  (~(0xff  8))|(0x1  8); //选择CPU接口       CPU0.ICCPMR  255; //中断屏蔽优先级       CPU0.ICCICR  1;   //使能中断到CPU   }      // RTC 闹钟设置   void rtc_alarm(void)   {       int i  20;       // 配置RTCALM.ALM寄存器第[6]位置1闹钟使能第[0]位置1秒时钟使能       RTCALM.ALM  (1  6)|(1  0);       RTCALM.SEC  0x20; // SEC设为20每到20秒时闹钟到时发生一次中断       printf(请等待20s....\n);       ICDDCR  1;  //使能分配器       ICDISER.ICDISER2  ICDISER.ICDISER2 | (0x1  12); //使能相应中断到分配器       ICDIPTR.ICDIPTR19  ICDIPTR.ICDIPTR19  (~(0xff  0))|(0x1  0); //选择CPU接口       CPU0.ICCPMR  255; //中断屏蔽优先级       CPU0.ICCICR  1;   //使能中断到CPU       while(i ! 1)       {           printf(还剩 %-2d s\r, --i);           mydelay_ms(1000);       }       printf(\n);   }   5) -- uart.c [cpp] view plaincopy #include exynos_4412.h      // UART初始化函数   void uart_init()   {       // COM2口 Rx Tx分别连接GPA1_0 GPA1_1       // GPA1 [3:0]位 置2设为UART_2_RXD,[7:4]位置2设为UART_2_TXD;       GPA1.CON  (GPA1.CON  ~0xFF ) | (0x22); //GPA1_0:RX;GPA1_1:TX          // 设置传输格式ULCONn寄存器[1:0]用于设置数据位bit数这里设为8       UART2.ULCON2  0x3;       // 设置UART工作模式UCONn寄存器  [3:2] [1:0] 均置为1 Tx Rx 均设为中断或轮询模式       UART2.UCON2  0x5;          /*       * 波特率设置          根据给定的波特率、所选择时钟源频率          可以通过以下公式计算 UBRDIVn 寄存器 (n 为 04对应 5个 UART 通道 )的值。          UBRDIVn  (int)( UART clock / ( buad rate x 16) ) – 1          上式计算出来的 UBRDIVn 寄存器值不一定是整数          UBRDIVn 寄存器取其整数部分小部分由 UFRACVALn 寄存器设置          例如当UART clock为100MHz时要求波特率为115200 bps则          100000000/(115200 x 16) – 1  54.25 – 1  53.25          UBRDIVn  整数部分  53          UFRACVALn/16  小数部分  0.25          UFRACVALn  4       */       UART2.UBRDIV2  0x35;       UART2.UFRACVAL2  0x4;   }      void putc(const char data)   {       while(!(UART2.UTRSTAT2  0X2));       UART2.UTXH2  data;       if (data  \n)               putc(\r);   }   char getc(void)   {       char data;       while(!(UART2.UTRSTAT2  0x1));       data  UART2.URXH2;       if ((data  \n)||(data  \r))           {               putc(\n);               putc(\r);           }else               putc(data);       return data;   }   void puts(const  char  *pstr)   {       while(*pstr ! \0)           putc(*pstr);   }   void gets(char *p)   {       char data;       while((data  getc())! \r)       {           if(data  \b)           {               p--;           }           *p  data;       }       if(data  \r)       *p  \n;       *p  \0;   }   3、main函数 [cpp] view plaincopy #include exynos_4412.h   #include adc.h   #include key.h   #include pwm.h   #include rtc.h   #include uart.h      void mydelay_ms(int time)   {       int i, j;       while(time--)       {           for (i  0; i  5; i)               for (j  0; j  514; j);       }   }      void do_irq(void)   {       static int a  1;       int irq_num;       irq_num  CPU0.ICCIAR0x3ff;  //获取中断号       switch(irq_num)       {           case 57:    //按键中断               beep_off();               printf(请将电压调到正常值!!\n);               mydelay_ms(1000); //延时1s,等待电压调整               EXT_INT41_PEND  EXT_INT41_PEND |((0x1  1)); //清GPIO中断标志位               ICDICPR.ICDICPR1  ICDICPR.ICDICPR1 | (0x1  25); //清GIC中断标志位           break;              case 76:    // RTC 闹钟中断               printf(20s已到开始采集电压值\n);               rtc_tic(); // 20s 到后调用滴答计时器                  RTCALM.ALM  RTCALM.ALM  (~(1  6));//关掉闹钟防止下一个20s中断再次发生               RTCINTP   RTCINTP | (1  1); //清RTC中断标志位               ICDICPR.ICDICPR2  ICDICPR.ICDICPR2 | (0x1  12); //清GIC中断标志位               break;              case 77:    //滴答计时器中断               adc_collect();  //调用ad采样函数               RTCINTP   RTCINTP | (1  0);    //清RTC中断标志位               ICDICPR.ICDICPR2  ICDICPR.ICDICPR2 | (0x1  13); //清GIC中断标志位               break;       }       CPU0.ICCEOIR  CPU0.ICCEOIR(~(0x3ff))|irq_num; //清cpu中断标志位   }   /*   *  裸机代码不同于LINUX 应用层 一定加循环控制   */   int main (void)   {       printf(\n);       printf(------------------practice--------------------\n);          uart_init();       pwm_init();       rtc_init();       key2_init();          rtc_alarm();    //调用alarm函数开始定时          while(1)    //什么都不做等待中断发生       {          }      return 0;   }   将程序下载到开发板中执行结果如下 [cpp] view plaincopy ------------------practice--------------------   请等待20s....   20s已到开始采集电压值      电压值  1219 mV   电压值  1218 mV   电压值  1219 mV   电压值  1219 mV   电压值  1222 mV   电压值  1333 mV   电压值  1391 mV   电压值  1390 mV   电压值  1403 mV   电压值  1496 mV   电压值  1800 mV   电压值  1560 mV   电压值  873 mV   电压异常   电压值  825 mV   电压异常   电压值  825 mV   电压异常   电压值  826 mV   电压异常   电压值  826 mV   电压异常   请将电压调到正常值!!   电压值  825 mV   电压值  825 mV   电压值  826 mV   电压异常   请将电压调到正常值!!   电压值  827 mV   电压异常   电压值  825 mV   电压异常   电压值  825 mV   电压异常   电压值  684 mV   电压异常   电压值  143 mV   电压异常   电压值  364 mV   电压异常   电压值  1114 mV   电压值  1121 mV   电压值  1120 mV   电压值  1120 mV   电压值  1121 mV   电压值  1121 mV   电压值  1120 mV   电压值  1121 mV
http://www.zqtcl.cn/news/533311/

相关文章:

  • 请别人做网站会不会被盗有创意的广告图片及赏析
  • qq官方网站在家有电脑怎么做网站
  • 做计量检定的网站网站建设专业可行性分析
  • 上饶市建设局网站电脑课做网站所需的软件
  • 广州论坛建站模板网站开发流程原理
  • 网站开发深入浅出 - python篇四川网络营销
  • 做外贸比较好用的网站有哪些网站logo教程
  • 自适应产品网站模板坪地网站建设信息
  • 如何免费推广网站简历生成网站
  • 专业建站开发影视软件开发定制
  • jsp网站开发什么框架中山h5模板建站
  • 网页qq登陆网站旅游网站开发的国内外现状
  • 电影发布网站模板天津网络维护公司
  • 如何用ae做模板下载网站平面设计线上培训机构
  • 地方宣传网站建设的必要性汕头企业网站建站模板
  • html网站源代码网站非法字符过滤
  • 江苏盐城建筑公司网站网络服务提供商是指什么
  • 汕头网站搜索优化视频广告制作
  • 靖边县建设局网站苏州企业网站建设公司价格
  • 沈阳微网站三好街 网站建设
  • 毕业答辩ppt模板免费下载网站网站域名使用怎么做分录
  • 建设购物网站要求网页制作与网站建设 pdf
  • 众创空间网站建设wordpress上传与安装包
  • 公司网站怎么做seo关键词排名优化销售
  • 企业网站建设如何去规划广西南宁网站建设哪家好
  • 类似头条的网站怎么做长丰县住房和城乡建设局网站
  • 密云青岛网站建设腾讯云cdn加速wordpress
  • windows 2008 iis添加网站长虹电视网站建设中
  • 金华网站建设公司哪家好沧州南皮网站建设公司
  • 站群网站程序软装设计师资格证