基于stc15f2k60s2芯片单片机编程(串口+超声波)
通过单片机发送当前超声波测量的距离给串口1显示
(感谢广东某大神的帮助)
#include <stc15f2k60s2.h>
#include <intrins.h>void Timer0Init(void);
void xianshi();
void Send_Wave();
void Delay12us();
void celiang();
void Delay500ms();
void UartInit();
void sendbyte(unsigned char dat);
void sendstring(unsigned char *s);unsigned char display[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char shuzu[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int time, distance;
//unsigned char urdate;sbit TX = P1^0;
sbit RX = P1^1;void main()
{Timer0Init(); EA=1; ET0=1;UartInit(); ES=1;while(1){celiang();xianshi();Delay500ms();Delay500ms();Delay500ms();sendstring("实测距离:");if(distance > 100)sendbyte((distance % 1000 / 100) + 0x30); //0011 0000if(distance > 10)sendbyte((distance % 100 / 10) + 0x30);sendbyte((distance % 10 / 1) + 0x30);sendstring("cm \r\n");}
}/**************串口*****************/
void sendbyte(unsigned char dat)
{SBUF=dat;while(TI==0);TI=0;
}void sendstring(unsigned char *s)
{while(*s != '\0') //{sendbyte(*s++);}
}void UartInit(void) //9600bps @11.0592MHz
{SCON = 0x50; //8位数据,可变波特率AUXR |= 0x01; //串口1选择定时器2为波特率发生器AUXR |= 0x04; //定时器2时钟为Fosc,即1TT2L = 0xE0; //设定定时初值T2H = 0xFE; //设定定时初值AUXR |= 0x10; //启动定时器2
}void zhongduan() interrupt 4
{unsigned char urdate;if(RI==1) //是否接收完整{RI=0;urdate=SBUF ;sendbyte(urdate);}
}/**************超声波**********/
void send_wave()
{unsigned char i;for(i=0; i<8; i++){TX=1;Delay12us();TX=0;Delay12us();}
}void celiang()
{unsigned int time=0;TMOD &= 0x0f;TL1 = 0x00; //设置定时初值TH1 = 0x00; //设置定时初值send_wave();TR1 = 1; //定时器0开始计时while((RX==1) && (TF1==0));TR1=0;if(TF1==0){time=TH1;time = (time << 8) | TL1;distance = time * 0.017 * 1.085 + 0.5; //测量距离}else{ TF1=0; //禁止中断溢出distance=999;}
}void xianshi()
{display[0] = shuzu[distance % 1000 / 100];display[1] = shuzu[distance % 100 / 10];display[2] = shuzu[distance % 10 / 1];display[3]=0xff;display[4]=0xff;display[5]=0xff;display[6]=0xff;display[7]=0xff;
}void Timer0Init(void) //2毫秒@11.0592MHz
{AUXR |= 0x80; //定时器时钟1T模式TMOD &= 0xF0; //设置定时器模式TL0 = 0x9A; //设置定时初值TH0 = 0xA9; //设置定时初值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时
}void shuma() interrupt 1
{unsigned char i;P2=0XE0;P0=0XFF;P2=0X1F;P2=0XC0;P0 = 1 << i;P2=0X1F;P2=0XE0;P0=display[i];P2=0X1F;i++;if(i >= 8)i=0;
}void Delay12us()
{unsigned char i;_nop_();_nop_();i = 33;while(--i);
}void Delay500ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 22;j = 3;k = 227;do{do{while(--k);}while(--j);} while(--i);
}
基于stc15f2k60s2芯片单片机编程(串口+超声波)相关推荐
- 基于stc15f2k60s2芯片单片机编程(时钟DS1302)
**stc15f2k60s2芯片编程(时钟DS1302)** main.c函数 #include <STC15F2K60S2.H> #include <intrins.h> # ...
- 基于stc15f2k60s2芯片单片机编程(数码管)
**蓝桥杯stc15f2k60s2芯片编程(数码管)** ** ** (1)数码管显示01234567 ** ** #include <stc15f2k60s2.h>unsigned ch ...
- 基于stc15f2k60s2芯片单片机编程(闹铃)
用定时器中断写时钟加调节 1)关闭蜂鸣器.继电器等无关外设: 2)设备初始化时钟为 23 时 59 分 50 秒,闹钟提醒时间 0 时 0 分 0 秒. A.时间显示格式 2 3 - 5 9 - 5 ...
- 基于stc15f2k60s2芯片单片机编程(秒表)
用定时器做一个秒表,精确到0.1,S7按下,开始计时,S6按下清零 #include <stc15f2k60s2.h> #include <intrins.h> void Ti ...
- 基于stc15f2k60s2芯片单片机编程(EEPROM24C02实验)
主函数 #include <stc15f2k60s2.h> #include <intrins.h> #include <12.h> void shumaguan( ...
- 基于STC15系列单片机的串口中断例程
#include <STC15F2K60S2.H>#define FOSC 12000000 //晶振频率 #define BAUD 9600 //设置波特率unsigned char r ...
- K_A16_001 基于STM32等单片机驱动HX711称重模块 串口与OLED0.96双显示
K_A16_001 基于STM32等单片机驱动HX711称重模块 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 对应程序: 四.部分代码说明 1.接线引脚定义 ...
- 基于51单片机的智能超声波四轮遥控小车proteus仿真
硬件设计 下边讲一下遥控小车,同样是基于51单片机,利用超声波进行测距,利用蓝牙模块实现遥控(仿真里边没有蓝牙,所以采用的是RS485通信模拟) 仿真图: 由LCD1602作为显示器,具有蜂鸣器报警, ...
- 基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文)
基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文) 导读:触摸屏能够直观.生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好.触摸屏和单片机通信,需要根据触 ...
最新文章
- 自动驾驶与汽车安全电子技术
- MySQL 5.7.2 发布,增强性能和可扩展性
- Kubernetes安装之证书验证
- 2011年给力新作——《数据库系统工程师考试案例梳理、真题透解与强化训练》...
- ssh 连接服务器_使用 SSH Key 访问服务器
- 集成学习(ensemble learning)(二)
- IT人不要一辈子靠技术生存(转)
- 优化服务器犯法吗,服务器稳定性对于SEO优化有什么影响
- 题目458-小光棍数
- websocket 如何知道对方断开_在爱情里你知道该如何和对方相处吗?
- rp文件转换成html,Axure产品原型在手机上运行的方法
- 13种常用按钮、文本框、表单等CSS样式
- 微信公众号维护用服务器吗,微信公众号商城开发必须用服务器吗?
- 最新BT面板静态文件镜像库v7.1.1
- qq飞车手游服务器维护中,QQ飞车手游3月28日停机维护到几点_QQ飞车手游3.28停机维护时间_玩游戏网...
- 关于职业规划的座谈会
- MySql主键和唯一索引的区别
- AD8232 单导心率监测仪
- 《影响中国大数据产业进程100人》 刘冬冬: 数据如何来支持新的商业战争
- 当Proteus 8 Professional运行程序的时候出现有些器件不可用
热门文章
- python语言程序设计实践教程答案上海交通大学陈东_《C语言程序设计》蔺德军 主著【摘要 书评 在线阅读】-苏宁易购图书...
- linux 镜像源配置
- 数据结构 计算机网络,考研数据结构和计算机网络怎么复习?
- WPF 使用VLC播放rtsp网络视频流
- linux虚拟网口不同vlan,Openwrt创建虚拟网口(macvlan)
- linux 挂载常见错误,mount常见的错误。
- 简单入门编写html登录界面
- C#中使用SHA1算法对密码进行加密
- 阿里云备案要几天时间?
- Micro:bit 趣味学习套件 图形化编程开发板STEM创客教育