标题:
超声波测距320x240TFT显示的单片机源程序
[打印本页]
作者:
weihu
时间:
2017-11-7 03:37
标题:
超声波测距320x240TFT显示的单片机源程序
0.png
(12.72 KB, 下载次数: 48)
下载附件
2017-11-7 03:36 上传
nbctft.c:320x240TFT驱动程序,控制TFT实现汉字,字符显示,画点功能
超声波测距主程序:
#include"reg52.h"
#include"DELAY.h"
#include"NBCTFT.h"
#include"HC-SR04.h"
#define White 0xFFFF //LCD color
#define Black 0x0000
#define Blue 0x001F
#define Blue2 0x051F
#define Red 0xF800
#define Magenta 0xF81F
#define Green 0x07E0
#define Cyan 0x7FFF
#define Yellow 0xFFE0
unsigned int Device_code; //TFT控制IC型号
//**************声明外部函数和变量********************
extern void delayms(unsigned int count);
//extern unsigned int HC_SR04_Distance;
unsigned char i;
void main(void)
{
Device_code=0x9328; //TFT控制IC型号
TFT_Initial(); //初始化LCD
HC_SR04_Init(); //初始化超声波
Show_RGB(0,239,0,319,Yellow);
while(1)
{
//DELAY_nMS(30);
LCD_PutChar(0,0,HC_SR04_Gets()/1000 %10+'0',Black,Yellow);
LCD_PutChar(8,0,HC_SR04_Gets()/100 %10+'0',Black,Yellow);
LCD_PutChar(16,0,HC_SR04_Gets()/10 %10+'0',Black,Yellow);
LCD_PutChar(24,0,HC_SR04_Gets()/1 %10+'0',Black,Yellow);
}
}
复制代码
单片机源程序如下:
#include"reg52.h"
#include"DELAY.h"
#include"HC-SR04.h"
sbit HC_SR04_Trig=P3^3;// 超声波模块 输入端口 用来输入启动信号
sbit HC_SR04_Echo=P3^2;// 超声波模块 输出端口 用来声波信号返回
unsigned char HC_SR04_GetsFlag=0; // 超声波模块 才完成标志位
unsigned char HC_SR04_TimeL=0; // 超声波模块 定时器低位
unsigned char HC_SR04_TimeH=0; // 超声波模块 定时器高位
//unsigned int HC_SR04_Distance;
void HC_SR04_Init(void)
{
HC_SR04_Trig=0; // 拉低信号
// 配置INT0外部中断
IT0=1; // 设置 下降沿触发
EX0=1;
PX0=1;
// 配置T0定时器
TMOD = 0x10; // 模式1
ET1=1;
TL1=0; // 清除初始化时间TL
TH1=0; // 清除初始化时间TH
TR1=1; // 开启定时器
EA=1; // 打开 总中断 开关
}
unsigned int HC_SR04_Gets(void)
{
unsigned int HC_SR04_Distance = 0;
//--------------------------------------------------------
// 发送超声波启动信号
//--------------------------------------------------------
EX0=0; // 关闭外部中断0,外部中断捕获起始信号
ET1=0; // 关闭定时中断1,定时器计算时间长度
HC_SR04_Trig=1; // 拉高信号
DELAY_nUS(20); // 20us启动时间
HC_SR04_Trig=0; // 拉低信号,此过程为发送超声波操作
//--------------------------------------------------------
// 若Echo未拉高 说明采集未开始
//--------------------------------------------------------
while(HC_SR04_Echo==0);
HC_SR04_GetsFlag=0;
//--------------------------------------------------------
// 若拉高 说明采集开始,配置各个寄存器
//--------------------------------------------------------
EX0=1; // 打开外部中断0,外部中断捕获起始信号,注意修改
ET1=1; // 打开定时中断1,定时器计算时间长度,注意修改
TL1=0; // 清除初始化时间TL
TH1=0; // 清除初始化时间TH
TF1=0; // 清除溢出标志位
TR1=1; // 开启定时器
//--------------------------------------------------------
// 若拉高 说明采集开始
//--------------------------------------------------------
DELAY_nMS(20); // 20ms等待时间
EX0=0; // 关闭外部中断
TR1=0; // 关闭定时器
ET1=0; // 打开定时中断1
//--------------------------------------------------------
// 判断是否成功
//--------------------------------------------------------
if(HC_SR04_GetsFlag==1)
{
HC_SR04_Distance=HC_SR04_TimeH*256+HC_SR04_TimeL;
HC_SR04_Distance=(float)(HC_SR04_Distance)*0.172; // 厘米
}
return HC_SR04_Distance;
}
void HC_SR04_EXT_IRQHandler(void) interrupt 0
{
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
http://www.51hei.com/bbs/dpj-97776-1.html
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1