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

企业营销微网站建设用手机制作网站的软件

企业营销微网站建设,用手机制作网站的软件,PHP网站开发程序员招聘,模板网站制作文章目录 前言一、功能描述一、界面一二、界面二三、界面三四、界面四五、初始界面 二、编程实现 前言 具有测距、温度补充、实时时钟、记忆、阈值警报、串口数据发送等等功能#xff0c;通过LCD1602显示#xff0c;按键进行相关操作。 一、功能描述 LCD1602显示共有五个界面… 文章目录 前言一、功能描述一、界面一二、界面二三、界面三四、界面四五、初始界面 二、编程实现 前言 具有测距、温度补充、实时时钟、记忆、阈值警报、串口数据发送等等功能通过LCD1602显示按键进行相关操作。 一、功能描述 LCD1602显示共有五个界面按键一用于切换显示界面。 一、界面一 此界面测距为连续测距模式LCD1602不间断刷新测量距离和温度一旦测量距离小于设置的阈值单片机将会发出警报。此界面按下按键4可进入与上位机连接状态当上位机发送1至单片机后mcu立刻将测量数据发送至上位机。 二、界面二 此界面为阈值设置界面按键二用于改变设置位上限还是下限设置位会闪烁显示以此提示。按键三四用于加减。 三、界面三 此界面测距为单次测距模式按键二按下测量一次按键三按下则将当前测量距离和测量时间如235945时测量距离为45cm保存到EEPROM里面最多可以记录十次第十一次将会覆盖第一次数据。 四、界面四 此界面测距为回放模式按下按键二三切换回放序号LCD1602会显示在界面三时记录的距离和测量时间。 五、初始界面 上电后LCD1602会显示DS1302的初始时间设置此时需要通过按键二三四进行时间设置。设置完成后按下按键一系统进入界面一开始工作。 二、编程实现 核心代码main.c如下项目工程见超声波测距系统   各模块原理和代码见我的CSDN博客专栏单片机 #include main.h typedef unsigned char u8; //P2用于选择P0输出通道P0输出数据 #define outputp0(y,x) P0x,P20x1f,P2y,P20x1f; //按键值按键值缓存值 u8 kbdnum0,kbdtemp0; //显示页面值距离阈值设置选择位保存次数值时间设置选择位测量数据保存起始地址 u8 show_page0,distance_set_flag0,save_times1,set_time_flag0,save_distance_addr0x04; //测量阈值上限测量阈值下限LCD闪烁位 int distance_h350,distance_l6,LCD_showflag0; //测量阈值上下限数组十六进制便于进行保存到EEPROM或从EEPROM读取的操作 u8 distance_limit[4]{0}; //测量温度 float temper0; //时间保存中间量 u8 time_s_temp0; //主函数延时函数t ms void main_Delay1ms(int t) //11.0592MHz {unsigned char data i, j;while(t--){_nop_();_nop_();_nop_();i 11;j 190;do{while (--j);} while (--i);} }/** brief 按键值读取工作函数* param * reval * note: */void work_kbd() {if(kbdnum) //如果有按键按下{if(kbdnum13) //key1按下{show_page;show_page%4; //切换显示界面if(show_page0) //如果为界面0连续测距模式{TR00;temperrd_temper();TR01;work_ultra(); //界面0LCD_ShowString(1,1,Distance: . CM); //显示相应界面LCD_ShowString(2,1,Temper: . C );}else if(show_page1) //如果为界面1测量阈值设置模式{outputp0(0xa0,0x00); //关闭蜂鸣器防止在界面0警报状态下进入界面1导致蜂鸣器一直响distance_set_flag0;LCD_showflag0; //复位距离阈值设置位和LCD闪烁位LCD_ShowString(1,1,High: CM ); //显示相应界面LCD_ShowString(2,1,Low: CM );}else if(show_page2) //如果为界面2逐次测量模式{ save_distance_addr4;save_times1; //复位数据保存起始地址和保存次数LCD_ShowString(1,1,Distance: . CM); //显示相应界面LCD_ShowString(2,1,Time: - - );}else if(show_page3) //如果为界面3回放模式{save_distance_addr4;save_times1; //复位数据保存起始地址和保存次数LCD_ShowString(1,1,Save_Dis: . CM); //显示相应界面LCD_ShowString(2,1,Time: - - );TR00;at24c02_read_multi(read_time,save_distance_addr,3);distanceat24c02_read(save_distance_addr3)*256at24c02_read(save_distance_addr4);TR01; //将第一次保存数据读取出来}}else if(kbdnum14) //key2按下{if(show_page1) //如果是界面1测量阈值设置模式distance_set_flag!distance_set_flag; //改变距离阈值设置位用于切换选择设置上限或下限else if(show_page2) //如果是界面2逐次测量模式{ TR00;temperrd_temper();TR01;work_ultra(); //执行一次距离测量} else if(show_page3) //如果是界面3回放模式{if(save_distance_addr48) //用于选取下一个数据保存地址{save_distance_addr5;save_times;}else if(save_distance_addr48) //超出数据保存最大地址则返回最小地址{save_distance_addr4;save_times1;}TR00; //将保存数据读取出来at24c02_read_multi(read_time,save_distance_addr,3);distanceat24c02_read(save_distance_addr3)*256at24c02_read(save_distance_addr4); TR01; } }else if(kbdnum15) //key3按下{if(show_page1) //如果是界面1测量阈值设置模式{if(distance_set_flag0) //如果是设置距离上限{distance_h; //加一if(distance_h350) //防超过最大值distance_h--;}else if(distance_set_flag1) //如果是设置距离下限{distance_l; //加一if(distance_ldistance_h) //防超过距离上限distance_l--;} }else if(show_page2) //如果是界面2逐次测量模式将测量数据进行保存{TR00; time_s_tempread_time[0];read_time[0]read_time[2]; //用于DS1302读取时间顺序为秒分时而人习惯为时分秒因此将秒与时交换位置read_time[2]time_s_temp;at24c02_write_multi_page(read_time,save_distance_addr,3); //保存测量时间save_distance_addr3;at24c02_write(save_distance_addr,distance/256); //保存测量距离at24c02_delay5ms();at24c02_write(save_distance_addr,distance%256); //保存测量距离TR01; if(save_distance_addr54) //数据读取地址达到最大返回最小地址save_distance_addr4;save_times; //读取的数据对应的保存次序if(save_times10) //如果次序超过最大次数10则返回第一次save_times1;} else if(show_page3) //如果是界面3回放模式{if(save_distance_addr9) {save_distance_addr-5; //读取上一次保存数据save_times--;}else if(save_distance_addr9) //如果读取数据地址达到最小地址则返回最大地址{save_distance_addr49;save_times10;}TR00; //将数据读取出来at24c02_read_multi(read_time,save_distance_addr,3);distanceat24c02_read(save_distance_addr3)*256at24c02_read(save_distance_addr4); TR01; }}else if(kbdnum16) //key4按下{if(show_page0) //如果是界面0连续测距模式{LCD_ShowString(1,1,Please connect ); //等待与上位机连接LCD_ShowString(2,1, to computer! );while(receivebit0); //一旦连接for(save_distance_addr4;save_distance_addr53;save_distance_addr){sendbit(at24c02_read(save_distance_addr)); //将保存数据全部发送至上位机}LCD_ShowString(1,1,Datas sent OK! ); //提示发送完成LCD_ShowString(2,1, ); main_Delay1ms(3000);LCD_ShowString(1,1,Distance: . CM); //回到连续测距显示LCD_ShowString(2,1,Temper: . C ); receivebit0; //复位接收值}else if(show_page1) //如果是界面1测量阈值设置模式{if(distance_set_flag0) //如果是设置距离上限{distance_h--; //减一if(distance_hdistance_l) //防小于距离下限distance_h;}else if(distance_set_flag1) //如果是设置距离下限{distance_l--; //减一if(distance_l6) //防止小于最小值distance_l;} }else if(show_page2) //如果是界面2逐次测距模式{show_page0; //切换回界面0连续测距模式LCD_ShowString(1,1,Distance: . CM); //显示相应界面LCD_ShowString(2,1,Temper: . C ); } }if((kbdnum15||kbdnum16)show_page1) //如果在测量阈值设置模式改变了距离上限或下限的值则将新值进行保存{distance_limit[0]distance_h/256; //将距离上下限转换为16进制distance_limit[1]distance_h%256;distance_limit[2]distance_l/256;distance_limit[3]distance_l%256;TR00;at24c02_write_multi(distance_limit,0x00,4); //一次写入多个数据TR01;}kbdnum0; //清零按键值} }/** brief 界面0连续测距模式* param * reval * note: */void page_0() { TR00;temperrd_temper(); //测量温度TR01;if(tultra60) //每60ms测量一次{work_ultra(); //测量距离}if(distance(distance_l*10)distance(distance_h*10)) //如果在测量范围之内{LCD_ShowString(1,1,distance:); //正常显示测量距离LCD_ShowNum(1,10,distance/10,3);LCD_ShowNum(1,14,distance%10,1);LCD_ShowChar(1,13,.);LCD_ShowString(1,15,CM); outputp0(0xa0,0x00); //蜂鸣器关}else if(distance(distance_l*10)||distance(distance_h*10)) //如果超出测量范围{LCD_ShowString(1,1,Error! ); //测量距离显示“ERROR!”outputp0(0xa0,0x40); //蜂鸣器开}LCD_ShowSignedNum(2,8,temper,3);LCD_ShowNum(2,13,(int)(temper*100)%100,2); //显示温度 }/** brief 界面1测量阈值设置模式* param * reval * note: */void page_1() {if(LCD_showflag0) //如果LCD闪烁位为0正常显示{LCD_ShowNum(1,6,distance_h,3);LCD_ShowNum(2,5,distance_l,3);}else if(LCD_showflag1) //如果LCD闪烁位为1则清空相应数据显示位置{if(distance_set_flag0)LCD_ShowString(1,6, );else if(distance_set_flag1)LCD_ShowString(2,5, );} }/** brief 界面2逐次测距模式* param * reval * note: */void page_2() {TR00;DS1302_read(DS1302_write_addr); //读取时间TR01;LCD_ShowNum(1,10,distance/10,3); //显示相应数据LCD_ShowNum(1,14,distance%10,1);LCD_ShowNum(2,6,read_time[2]/16*10read_time[2]%16,2);LCD_ShowNum(2,9,read_time[1]/16*10read_time[1]%16,2);LCD_ShowNum(2,12,read_time[0]/16*10read_time[0]%16,2);LCD_ShowNum(2,15,save_times,2); }/** brief 界面3回放模式* param * reval * note: */void page_3() {LCD_ShowNum(1,10,distance/10,3); //显示相应数据LCD_ShowNum(1,14,distance%10,1);LCD_ShowNum(2,6,read_time[0]/16*10read_time[0]%16,2); //由于数据以16进制保存因此需要转换为10进制LCD_ShowNum(2,9,read_time[1]/16*10read_time[1]%16,2);LCD_ShowNum(2,12,read_time[2]/16*10read_time[2]%16,2);LCD_ShowNum(2,15,save_times,2); }/** brief 界面显示* param * reval * note: */void page_show() {switch(show_page){case 0:page_0();break;case 1:page_1();break;case 2:page_2();break;case 3:page_3();break;} }/** brief 上电时间初始化* param * reval * note: */void set_time() {outputp0(0x80,0xff); //关闭8位LEDoutputp0(0xa0,0x00); //关闭蜂鸣器继电器等LCD_Init(); //LCD1602初始化rd_temper(); //由于DS18B20上电默认85°为了防止温度有极小时间错误显示因此上电后即让DS18B20测量一次温度main_Delay1ms(1000); //系统上电后延时一秒确保各单位准备好工作Timer0_Init(); //定时器0初始化LCD_ShowString(1,1,Please set time!); //设置时间提示LCD_ShowString(2,1,Time: - - );while(kbdnum!13) //如果key1按下则退出时间设置{ if(kbdnum14) //如果key2按下{set_time_flag;set_time_flag%3; //时间设置选择位kbdnum0; //清零按键值}else if(kbdnum15) //如果key3按下{DS1302_write_time[set_time_flag]; //相应数据加一if(DS1302_write_time[set_time_flag]24set_time_flag2) //防止秒分时超出各自上限DS1302_write_time[set_time_flag]0;else if(DS1302_write_time[set_time_flag]60)DS1302_write_time[set_time_flag]0;kbdnum0; //清零按键值}else if(kbdnum16) //如果key4按下{if(DS1302_write_time[set_time_flag]1)DS1302_write_time[set_time_flag]--; //相应数据减一elseDS1302_write_time[set_time_flag]59*(set_time_flag2)23*(set_time_flag2); //防止秒分时小于各自下限kbdnum0; //清零按键值} if(LCD_showflag0) //如果LCD闪烁位为0正常显示{LCD_ShowNum(2,6,DS1302_write_time[2],2);LCD_ShowNum(2,9,DS1302_write_time[1],2);LCD_ShowNum(2,12,DS1302_write_time[0],2);}else if(LCD_showflag1) //如果LCD闪烁位为1则清空相应数据显示位置{switch(set_time_flag){case 0:LCD_ShowString(2,12, );break;case 1:LCD_ShowString(2,9, );break;case 2:LCD_ShowString(2,6, );break; } }}if(kbdnum13) //key1按下{TR00; for(set_time_flag0;set_time_flag3;set_time_flag) //将设置时间从10进制转换为16进制DS1302_write_time[set_time_flag]DS1302_write_time[set_time_flag]/10*16DS1302_write_time[set_time_flag]%10;DS1302_set(DS1302_write_addr,DS1302_write_time); //设置DS1302时间TR01;kbdnum0; //清零按键值} }/** brief 系统初始化* param * reval * note: */void init() {Timer1_Init(); //定时器0初始化Uart1Init(); //串口1初始化LCD_ShowString(1,1,distance: CM ); //上电默认界面0显示相应界面LCD_ShowString(2,1,Temper: . C );//将保存的距离上下限读取并设置为距离阈值at24c02_read_multi(distance_limit,0x00,4);distance_hdistance_limit[0]*256distance_limit[1];distance_ldistance_limit[2]*256distance_limit[3];distancedistance_l*101; //防止未开始测量即报警 } void main() {set_time(); //设置时间init(); //系统初始化receivebit0; //清零接收位while(1){work_kbd(); //按键读取page_show(); //界面显示}}void Timer0_Isr(void) interrupt 1 {static u8 kbd_longflag0; //矩阵键盘长按标志位1长按0短按static int kbd_short_t0,kbd_t0,kbd_long_t0,tlcd0;TL0 0x66; //设置定时初始值TH0 0xFC; //设置定时初始值kbd_short_t; //矩阵键盘按键短按时间计数if(kbd_short_t(500*kbd_longflag25*(!kbd_longflag))) //短按每25ms检测一次按键{if(!(colu1colu2colu3colu4)) //长按检测每25ms检测矩阵键盘按键是否仍在按下如果是{kbd_t; //矩阵键盘按键按下时间计数以25ms为单位if(kbd_t80) //如果持续按下2s{kbd_t80; //防止溢出kbd_longflag1; //切换为长按模式}}else if(colu1colu2colu3colu4) //长按检测每25ms检测按键是否仍在按下如果不是{kbd_t0; //清零按键按下时间计数kbd_longflag0; //切换为短按模式}kbd_short_t0; //清零短按时间计数if(kbd_longflag0) //如果是短按模式{kbdtempkbd_send(0);if(kbdtemp) //按键以短按模式检测kbdnumkbdtemp;}}kbd_long_t; //按键长按时间计数if(kbd_long_t500) //长按时每500ms检测一次按键{kbd_long_t0; //清零按键长按时间计数if(kbd_longflag1) //如果是长按模式{if(kbd_send(1)) //按键以长按模式检测kbdnumkbd_send(1);}}tultra; //超声波工作时间间隔计数tlcd; //LCD闪烁位时间计数if(tlcd500){tlcd0;LCD_showflag!LCD_showflag; //实现LCD1602闪烁显示} }
http://www.pierceye.com/news/278044/

相关文章:

  • 建站程序aspiis 默认网站 删除
  • 手机开网店的免费平台河南seo推广多少钱
  • 网站app推广怎么做wordpress 手机号注册
  • 网站开发到上线需要多久骆驼有没有做网站的公司
  • 中小企业网站建设示范平台wordpress停用react
  • 网站怎样防止攻击seo顾问培训
  • 网站建设后需要维护吗微信安全中心官网
  • dw可以做h5网站设计素材网站0
  • 建设银行郑州中心支行网站青海商会网站建设公司
  • 国外小型网站中国视觉设计网
  • 沈阳专业网站制作团队泰安网络软件公司
  • 网站建设招聘兼职0基础建站教程
  • 如何从零开始做网站文学网站建设平台
  • 企业网站的网址通常包含dchaser wordpress
  • 什么是做网站flash是怎么做网站的
  • 什么是速成网站石家庄网站建设就找
  • 张家界网站建设要求滨州网站建设费用
  • wordpress订阅插件南昌优化排名推广
  • 国外做网站公司能赚钱吗wordpress登录锚点弹
  • 微网站平台微网站建设方案邢台市有几个区几个县
  • 茶叶外贸网站建设中国建设银行是国企还是央企
  • 成都网站建设公司有哪些内容必应搜索
  • 青岛建设集团招聘信息网站公司官网怎么制作
  • 本溪网站开发公司电话县蒙文网站建设汇报
  • 广州建网站有哪些怎么做网站建设赚钱
  • led视频网站建设邯郸建设信息网站
  • 开发网站培训班网站详情页用cdr做可以吗
  • 相亲网站开发与设计报告广州网站维护
  • 门户网站 技术方案北京感染人数最新消息
  • 网站制作过程流程酷家乐在线设计官网