当前位置:首页 > 基于51单片机的超声波测距系统
(五)课程小结
在单片机课程设计中,经过选题、设计电路、购买元件、焊接电路、程序编写调试等步骤,最终得到完整的作品。这次课程设计是本门课程课堂教学的延伸和发展,是理论知识与工程实践之间的衔接。通过本课程设计,我获益匪浅,增强了我对单片机专业知识的学习,加深了认识,进一步巩固了我的动手能力,培养独立自主、综合分析的思维与创新能力,最终使初步具有设计小型计算机控制系统的硬件及软件的能力。同时,通过资料搜集、方案分析、系统设计与报告撰写的一系列过程,得到一次科学研究工作的初步训练。从而,在专业知识与研究方法方面为日后的毕业设计乃至毕业后的工作奠定良好的基础。本次课程设计 使我得到了锻炼,让我明白学习不知能是纸上谈兵,要能在生活生产中用到的具体使用。
- 17 -
(六)附录
部分程序清单 主程序
#include
/*----------------------------------------------- 全局变量
-----------------------------------------------*/ #define TOP 10 #define BOTTOM 10 #define LEFT 15 #define RIGHT 10 #define DISTANCE 20 #define CCOLOR 0xffff #define BCOLOR 0x0000
#define ulong unsigned long #define uchar unsigned char #define uint unsigned int
data uchar testok; //超声测试成功
unsigned int temp; //温度临时变量 //v为声速 float temperature,v;
unsigned char TempH,TempL;unsigned char vph,vpl; //vph,vpl分别为声速判断时温度的十位个位的值 data uchar dispram[5];
/*----------------------------------------------- 函数声明
-----------------------------------------------*/ void disp(void);
extern void cs_t(void); //超声波 //extern void delay(uint);//延时
/*------------------------------------------------ 主函数
------------------------------------------------*/ main() {
data ulong time; //测距程序 TMOD = 0x11; IE = 0x80; //测距程序
- 18 -
ILI9325_Initial(); //初始化LCD CLR_Screen(BCOLOR); //用背景色清屏 //画矩形框
Rectangle(LEFT,TOP,LEFT+100,TOP+140,CCOLOR); Rectangle(LEFT+1,TOP+1,LEFT+99,TOP+139,CCOLOR);
LCD_PutString(LEFT+10,TOP+10,\当前声速:\ LCD_PutString(LEFT+10,DISTANCE+TOP+12,\m/s\
LCD_PutString(LEFT+10,DISTANCE*2+TOP+10,\当前温度:\
LCD_PutString(LEFT+10,DISTANCE*3+TOP+10,\ ℃\
LCD_PutString(LEFT+10,DISTANCE*4+TOP+11,\距离:\
LCD_PutString(LEFT+10,DISTANCE*5+TOP+11,\cm\
//画中间间隔线
Line(LEFT,TOP+DISTANCE+8,LEFT+100,TOP+DISTANCE+8,CCOLOR);
Line(LEFT,TOP+DISTANCE*2+8,LEFT+100,TOP+DISTANCE*2+8,CCOLOR); Line(LEFT,TOP+DISTANCE*3+8,LEFT+100,TOP+DISTANCE*3+8,CCOLOR); Line(LEFT,TOP+DISTANCE*4+8,LEFT+100,TOP+DISTANCE*4+8,CCOLOR); Line(LEFT,TOP+DISTANCE*5+8,LEFT+100,TOP+DISTANCE*5+8,CCOLOR); while(1) {
//测速 cs_t();
testok = 0; EX0 = 1; ET0 = 1 ; //测速
temp=ReadTemperature();//读取温度 TempH=temp>>4; TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理 vph=(TempH0)/10; vpl= (TempH0); v=331.5+0.607*TempH ;
/* switch(vph) {
case 1:v=169;break;
- 19 -
case 2:v=344;break;
//case 1:if(vpl<=5)v=169;else v=172;break; //case 2:if(vpl<=5)v=172;else v=174;break; case 3:v=349;break; } */
if (1 == testok) {
time = TH0;
time = (time<<8) | TL0; time *=v/2; time /= 10000;
dispram[0] = (uchar) (time % 10); time /= 10;
dispram[1] = (uchar) (time % 10); time /= 10;
dispram[2] = (uchar) (time % 10); dispram[3] = (uchar) (time / 10); if (0 == dispram[3]) dispram[3] = 0; } else {
dispram[0] = 0; dispram[1] = 0; dispram[2] = 0; dispram[3] = 0; }
disp(); //液晶显示信息 } }
/*------------------------------------------------ 显示处理函数
------------------------------------------------*/ void disp(void) {
unsigned char TempData[4];
TempData[0]='0'+dispram[3]; //距离高到低 TempData[1]='0'+dispram[2]; TempData[2]='0'+dispram[1]; TempData[3]='0'+dispram[0];
LCD_PutString(LEFT+20,DISTANCE*5+TOP+12,TempData,CCOLOR,BCOLOR); TempData[0]='0'+((int)v00)/100; //速度高到低 TempData[1]='0'+((int)v00)0/10; TempData[2]='0'+((int)v00)0; TempData[3]=' ';
- 20 -
共分享92篇相关文档