基于单片机的超声波测距系统课程设计.doc

PAGE \* MERGEFORMAT 1 PAGE \* MERGEFORMAT 1 课程设计 题目: 基于单片机的超声波测距仪 PAGE \* MERGEFORMAT 2 PAGE \* MERGEFORMAT 2 目 录 TOC \o 1-4 \h \u #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; //用来控制连加的速度 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;iq;i++) for(j=0;j120;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);

文档评论(0)

1亿VIP精品文档

相关文档