基于单片机的超声波测距系统论文 - 图文(6)

2019-04-22 16:03

附录三:物料清单

元件注解 元件类型 10K 电阻 10uF 电容 12M 晶振 D 指示灯 发光二极管 DS04 数码管 SW-灰色 电源开关 开关 U1 单片机 蜂鸣器 蜂鸣器 9012 三极管 20 电容 Header 4 超声波接口 SW-PB 独立按键 按键 9012 三极管 2K 电阻 1K 电阻 电阻 元件称号 R14 C1 Y1 D1 DS1 SW1 U1 B1 Q5 C2, C3 P1 S1, S2, S3, S4 Q1, Q2, Q3, Q4 R4, R5, R6, R7, R13, R15 R1, R2, R3, R8, R9, R10, R11, R12 数量 1 1 1 1 1 1 1 1 1 2 1 4 4 6 8

24

附录四:程序源代码

#include #include #include \

#define uchar unsigned char #define uint unsigned int

//数码管段选定义 0 1 2 3 4 5 6 7 8 9

uchar code

smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //断码 //数码管位选定义

uchar code smg_we[]={0xe0,0xd0,0xb0,0x70};

uchar dis_smg[8] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};

sbit smg_we1 = P3^4; //数码管位选定义 sbit smg_we2 = P3^5; sbit smg_we3 = P3^6; sbit smg_we4 = P3^7;

sbit c_send = P3^2; //超声波发射 sbit c_recive = P3^3; //超声波接收

uchar flag_hc_value; //超声波中间变量

sbit beep = P2^3; //蜂鸣器IO口定义

bit flag_key_b_en,flag_key_set_en; //按键蜂鸣器使能

uchar smg_i = 3; //显示数码管的个位数 bit flag_300ms ;

bit key_500ms ;

long distance; //距离 uint set_d; //距离

bit flag_csb_juli; //超声波超出量程

uint flag_time0; //用来保存定时器0的时候的

// 按键的IO变量的定义 uchar key_can; //按键值的变量

uchar zd_break_en,zd_break_value; //自动退出设置界面 uchar menu_shudu = 10; //用来控制连加的速度

25

bit flag_lj_en; //按键连加使能

bit flag_lj_3_en; //按键连3次连加后使能 加的数就越大了 uchar key_time,flag_value; //用做连加的中间变量 uchar menu_1; //菜单设计的变量 uchar a_a;

/***********************1ms延时函数*****************************/ void delay_1ms(uint q) {

uint i,j;

for(i=0;i

for(j=0;j<120;j++); }

/***********************处理距离函数****************************/ void smg_display() {

dis_smg[0] = smg_du[distance % 10];

dis_smg[1] = smg_du[distance / 10 % 10];

dis_smg[2] = smg_du[distance / 100 % 10] & 0x7f; }

/******************把数据保存到单片机内部eepom中******************/ void write_eepom() {

SectorErase(0x2000);

byte_write(0x2000, set_d % 256); byte_write(0x2001, set_d / 256); byte_write(0x2058, a_a); }

/******************把数据从单片机内部eepom中读出来*****************/ void read_eepom() {

set_d = byte_read(0x2001); set_d <<= 8;

set_d |= byte_read(0x2000); a_a = byte_read(0x2058); }

26

/**************开机自检eepom初始化*****************/ void init_eepom() {

read_eepom(); //先读

if(a_a != 1) //新的单片机初始单片机内问EEPOM {

set_d = 100; a_a = 1;

write_eepom(); } }

/****************独立按键处理函数********************/ void key() {

static uchar key_new = 0,key_old = 0,key_value = 0; if(key_new == 0)

{ //按键松开的时候做松手检测 if((P2 & 0x07) == 0x07) key_value ++; else

key_value = 0; if(key_value >= 5) {

key_value = 0; key_new = 1;

flag_lj_en = 0; //关闭连加使能 flag_lj_3_en = 0; //关闭3秒后使能 flag_value = 0; //清零 key_time = 0; write_eepom(); } } else {

if((P2 & 0x07) != 0x07)

key_value ++; //按键按下的时候 else

key_value = 0; if(key_value >= 5) {

key_value = 0; key_new = 0;

flag_lj_en = 1; //连加使能

27

zd_break_en = 1; //自动退出设置界使能

zd_break_value = 0; //自动退出设置界变量清零 flag_key_b_en = 1; //按键蜂鸣器使能 } }

key_can = 20;

if(key_500ms == 1) //连加 {

key_500ms = 0; key_new = 0; key_old = 1;

zd_break_value = 0; }

if((key_new == 0) && (key_old == 1)) {

switch(P2 & 0x07) {

case 0x06: key_can = 3; break; //得到k2键值 case 0x05: key_can = 2; break; //得到k3键值 case 0x03: key_can = 1; break; //得到k4键值 }

// dis_smg[3] = smg_du[key_can % 10];

}

key_old = key_new; }

void smg_we_switch(uchar i) {

switch(i) {

case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;

case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;

case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;

case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break; } }

/***********************数码显示函数

28


基于单片机的超声波测距系统论文 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:事故检查检讨书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: