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
|