网站设计自学,要怎么制作网站,wordpress在哪放商务通代码,宁波网站建设方案报价一、真题
二、模块构建
1.编写初始化函数(init.c)
void Cls_Peripheral(void);
关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器
2.编写LED函数#xff08;led.c#xff09;
void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器 关闭锁存…一、真题
二、模块构建
1.编写初始化函数(init.c)
void Cls_Peripheral(void);
关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器
2.编写LED函数led.c
void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器 关闭锁存器
3.编写数码管函数seg.c
void Seg_Tran(unsigned char *pucSeg_Buf,unsigned char *pucSeg_Code);
1段码转换函数
定义两个变量i,jfor循环加Switch语句进行段码转换,在资源数据包查找段码表并根据题目要求进行段码转换注意添加空格代表都不显示case记得加 判断是否有 .
void Seg_Disp(unsigned char *pucSeg_Code,unsigned char ucSeg_Pos)
2数码管显示函数
要对数码管进行消隐显示的位置显示的内容
4.独立按键代码编写
unsigned char Key_Read_BTN(void)
有返回值函数unsigned charif语句判断按键是否按下返回按键所对应的数字 5.超声波代码编写
unsigned char Wave_Recv(void)
定义Tx和Rx引脚将定时器里的TR0设置为0定义变量初始值为10发射10个周期的波形为了规范将定时器的初值进行再次赋值再令TR01让定时器开始计时发送10个周期的信号每12us,TF0溢出将Tx进行异或运算while循环加分号TF0清零关闭定时器将定时器初值清零打开定时器进行正计时whileRX!TF0如果接收到信号或TF0溢出则退出循环退出循环后关闭定时器如果TF0溢出导致退出循环返回最大值255否则返回计时时间返回的时间单位是us,需要统一单位*0.017 进而换算成距离单位为厘米
6.定时器代码编写
void Timer0Init(void); void Timer1Init(void);
定时器0作为超声波定时器将TR00 设置定时器0供超声波代码使用时间为12us,12T,12MHz定时器1作为主定时器,加上ET11
7.编写AD/DA代码
unsigned char PCF8591_ADC(void)
void PCF8591_DAC(unsigned char dat); 定义SCL,SDA添加intrins.h头文件定义变量用于存储采集的电压写入流程开始--发送写入地址--等待应答--发送电位器地址--等待应答读取流程开始--发送读取地址--等待应答--变量接收数据--发送应答--终止读取地址为0x91 写入地址为0x90电位器地址为0x43 光敏电阻地址为0x41
三、主函数编写
1.调用初始化定时器0定时器1打开中断总开关stdio.h
2.编写数码管函数 每200ms检测一次if模式Disp_Mode判断不要忘记调用数码管转换函数否则数码管会全部点亮
3. 中断服务函数
为各个变量进行自加 数码管的动态显示
4.模式界面编写 电压数据为unsigned char类型要转化成浮点数 %4.2f参数界面注意上下限的值测距界面注意超声波状态是否开启
5.ADC函数编写 没有规定时间任意即可将采集来的数据赋值给变量对采集的数据进行判断看是否在上下限里从而对超声波设置不同的状态
6.key函数编写 定义两个变量时间为20msif判断两个变量是否相等相等返回不相等进入Switch语句判断哪个按键被按下最后不要忘记加上Key_Val_OldKey_Vals4按下Disp_Mode1对3取模因为是三个界面进行切换根据题目要求判断是否到参数界面到参数界面默认选择电压上限s6按下参数值加0.5注意要判断是否在参数界面s7按下参数值减0.5注意要判断是否在参数界面注意s4按键按下界面切换的顺序和题目给的顺序不一致由于要求对参数的调整在s4按下后才生效所以需要增加两个参数同时记得更改其他按键参数变量
7.超声波函数编写
性能指标未规定时间任意即可在将测距结果赋值给变量前先判断状态为0直接返回不进行测距
8.编写DAC函数
判断超声波状态未开启输出0若开启判断超声波测距结果用if else语句来实现相应功能 关于呈线性关系的那部分图像可以用数学方法计算出ykxb中的k和b 9.编写led函数
性能要求led响应时间小于0.2s判断处于那个界面点亮置1熄灭置0点亮用|熄灭用置1再取反切换亮灭状态用^切换亮灭状态把它放到定时器中断里 四、难点解析
1.按键切换界面的顺序和题目所给顺序不一致
2.调整参数时参数值不生效当按键按下时才生效
3.加减模式的循环用到了if判断
4.DAC的数据转换——通过数学方法解出来 易错点
将不同函数的计时变量复制粘贴时忘记更改
五、主函数代码
#include led.h
#include init.h
#include seg.h
#include key.h
#include tim.h
#include ultrasonic.h
#include iic.h
#include stdio.h
//seg
unsigned char pucSeg_Buf[12],pucSeg_Code[8],ucSeg_Pos0;
//time
unsigned long ulms0;
unsigned int uiSeg_Dly0;
unsigned int uiADC_Dly0;
unsigned int uiDAC_Dly0;
unsigned int uiKey_Dly0;
unsigned int uiLed_Dly0;
unsigned int uiUltrasonic_Dly0;
//led
unsigned char ucLed0x00;
//ADC
unsigned char ucADC0;
float ADC_Pram_Max4.5 ,ADC_Pram_Min 0.5;
float ADC_Pram_Max_temp4.5 ,ADC_Pram_Min_temp 0.5;
//key
unsigned char Key_Val0,Key_Val_Old0;
//ultrasonic
unsigned char ucDist0;
unsigned char Ultrasonic_Status0;
//function
void Seg_Proc(void);
void Led_Proc(void);
void ADC_Proc(void);
void DAC_Proc(void);
void Key_Proc(void);
void Ultrasonic_Proc(void);
//mode
unsigned char Disp_Mode0;
unsigned char Pram_Mode0;//0--max 1--minvoid main(void)
{Cls_Peripheral();Timer0Init();Timer1Init();EA1;while(1){Seg_Proc();ADC_Proc();DAC_Proc();Key_Proc();Led_Proc();Ultrasonic_Proc();}
}
void Seg_Proc(void)
{if(uiSeg_Dly200)return;uiSeg_Dly0;if(Disp_Mode0){sprintf(pucSeg_Buf,U %4.2f,ucADC/51.0);}else if(Disp_Mode2){sprintf(pucSeg_Buf,P %3.1f %3.1f,ADC_Pram_Max_temp,ADC_Pram_Min_temp);}else{if(Ultrasonic_Status0){sprintf(pucSeg_Buf,L AAA);}else {sprintf(pucSeg_Buf,L %3u,(unsigned int)ucDist);}}Seg_Tran(pucSeg_Buf,pucSeg_Code);
}
void Led_Proc(void)
{if(uiLed_Dly100)return;uiLed_Dly0;if(Disp_Mode0){ucLed|0x01;ucLed~0x06;}else if(Disp_Mode1){ucLed|0x02;ucLed~0x05;}else{ucLed|0x04;ucLed~0x03;}if(Ultrasonic_Status1){ucLed^0x80;}else{ucLed~0x80;}Led_Disp(ucLed);
}
void ADC_Proc(void)
{if(uiADC_Dly200)return;uiADC_Dly0;ucADCPCF8591_ADC();if((ucADC/51.0ADC_Pram_Min)(ucADC/51.0ADC_Pram_Max)){Ultrasonic_Status1;}else{Ultrasonic_Status0;}
}
void Key_Proc(void)
{if(uiKey_Dly20)return;uiKey_Dly0;Key_ValKey_Read_BTN();if(Key_ValKey_Val_Old)return;switch(Key_Val){case 4:Disp_Mode(Disp_Mode1)%3;if(Disp_Mode2){Pram_Mode0;ADC_Pram_Max_tempADC_Pram_Max;ADC_Pram_Min_tempADC_Pram_Min;}else if(Disp_Mode0){ADC_Pram_MaxADC_Pram_Max_temp;ADC_Pram_MinADC_Pram_Min_temp;}break;case 5:if(Disp_Mode2){Pram_Mode(Pram_Mode1)%2;}break;case 6:if(Disp_Mode2){if(Pram_Mode0){if(ADC_Pram_Max_temp5.0){ADC_Pram_Max_temp0.5;}else{ADC_Pram_Max_temp0.5;}}else{if(ADC_Pram_Min_temp5.0){ADC_Pram_Min_temp0.5;}else{ADC_Pram_Min_temp0.5;}}}break;case 7:if(Disp_Mode2){if(Pram_Mode0){if(ADC_Pram_Max_temp0.5){ADC_Pram_Max_temp5.0;}else{ADC_Pram_Max_temp-0.5;}}else{if(ADC_Pram_Min_temp0.5){ADC_Pram_Min_temp5.0;}else{ADC_Pram_Min_temp-0.5;}}}break;}Key_Val_OldKey_Val;
}
void Ultrasonic_Proc(void)
{if(uiUltrasonic_Dly500)return;uiUltrasonic_Dly0;if(Ultrasonic_Status0)return;ucDistWave_Recv();
}
void DAC_Proc(void)
{if(uiDAC_Dly200)return;uiDAC_Dly0;if(Ultrasonic_Status0){PCF8591_DAC(0);}else {if(ucDist20){PCF8591_DAC(51);}else if(ucDist80){PCF8591_DAC(255);}else{PCF8591_DAC(3.4*ucDist-17);}}
}
void Time_1(void) interrupt 3
{ulms;uiSeg_Dly;uiADC_Dly;uiDAC_Dly;uiKey_Dly;uiLed_Dly;uiUltrasonic_Dly;if (ulms%20){ucSeg_Pos(ucSeg_Pos1)%8;Seg_Disp(pucSeg_Code,ucSeg_Pos);}}