版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、系统上电配置MCU、配置TDC、配置LCD扫描按键,等待按键按下由P1 口产生占空比为50%、周期为10ms的脉冲段读寄存器状态看测量是正常还是溢出等待下次脉冲开启TDC的start 口 TDC进入测量状态完成测量测量溢出+*判断中断正常溢出1读数据1等待下一次脉冲到来1:完成10嗽脉冲发射#include<reg51.h>#include <stdio>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define luchar unsigned long cha
2、r#define luint unsigned long int/=端口设置程序 =/ Sbit SPI_SSN=P1.3;Sbit SPI_SCK=P1.4;Sbit SPI_SI=P1.5;Sbit SPI_SO=P1.6;Sbit INT=P1.7;Sbit RS=P0.5;Sbit RW=P0.6;Sbit E=P0.7;/=SPI 通信函数声明 =/Void SPI_enable(Void); /SPI 片选,使能开Void SPI_close(Void); /SPI 使能关Void SPI_sendone(Void); /发送一位数据 1Void SPI_sendzero(Void
3、); /发送一位数据 0Void SPI_write8(uchar ); /写 8 位数据Void SPI_write32(uchar ); /写 32 位数据Luchar SPI_read16(void); /读 16 位数据Luchar SPI_read32(void); /读 32 位数据Void GP2_peizhi(Void); /TDC-gp2 配置/=LCD 通信函数声明 =/Void LCD_wdate(uchar ); /写数据Void LCD _wcommand(uchar ); /写指令Void LCD_delay(uint); /延时程序Void LCD_peizhi(
4、V oid ); /LCD 配置/= 脉冲产生函数声明 =/Void fire_gene(void); /脉冲产生/= 数据处理函数声明 =/ Double float aver(Uchar sample,Uchar i) /时间数据转化为距离 /=数据显示函数 =/ Void LCD_xianshi(uchar date,uchar i) /显示程序Void main()Double float length;Uchar ss6;/5 为有效距离数据 ASCALL 码Uint R=100;/采样频率uchar Stat; /TDC 数据状态字 Uchar sample100; /采样数据 U
5、char error= ”notoscale”; /显示超出量程Uint i=0;GP2_peizhi();/上电配置 TDC_GP2LCD_peizhi();/上电配置 LDCTOMD=Ox11;设置TO、T1工作在模式2TH1=0xFC;TL仁0x78 ; /定时器1产生5ms定时While (p 1 .O); /扫描键盘,等待按下Whlie(R-)TR1=1;/启动定时器 1fire_gene(void); /产生 5ms 脉冲While(!p1.7);/扫描中断口,等待测量完成SPI_write32(0xb4); /写入读状态寄存器指令Stat=SPI_read16(); /读状态寄存
6、器If(Stat&0x0600>0) /判断测量是正常还是超出量程 /测量超出量程SPI_write8(0x70); /TDC 上电复位While(!TF1);/等待停歇结束Continue;/进行下一次测量Else/测量正常Samplei=SPI_read16(); /读测量数据 i+;/计算测量次数SPI_write8(0x70); /TDC 上电复位While(!TF1);/等待下一次测量TR1=0;Length=aver(sample, i);/数据处理,将时间数据转化为距离MIf(length=0) /超出量程LCD_Xianshi(error,9);/LCD 显示“
7、notoscale”Elsesprintf(ss, "%3.2f", length); /将 Length 转化为 6 为 ASCALL 码LCD_Xianshi(ss,6); /显示 5 位有效数据单位 MWhile(p1.0); /等待按键释放/= 子程序 =/Void fire_gene(void)DoTH0 = 0xFC;TL0 = 0x0C;/设置定时器初值(对应 0.5ms)TR0 = 1;/启动定时器0while ( !TF0 );/等待定时器0 溢出TR0 = 0;/停止定时器0TF0 = 0;/清除溢出标志 0p1A=1;while(!TF1);/等待定时
8、器 1 溢出TF1=0;/清除溢出标志TR1;/启动定时器1,产生5ms停歇Return;Double float aver(Uchar sample,Uchar i)uchar j;luchar sum;Double float length;For(j=0;j<i;j+)sum+=samplei;length=0.00975*(sum/i);/将时间数据转化为距离单位 MReturn length;Void LCD_xianshi(uchar date,uchar i)LCD _wcommand(0x80);/第一行最左边显示For(j=0;j<i;j+)LCD_wdate(d
9、atej);Return;/=TDC 通信函数 =/Void SPI_enable(V)id)/开启 spi 通信,将 ssn 置低SPI_SSN =0; /ssn 置低_NOP();return;Void SPI_close(Void)/关闭 spi 通信,将 ssn 置高SPI_SSN=1; /ssn 置高 _NOP();return;Void SPI_sendone(); /发送一位数据 1 SPI_SCK=1; /SCK 高电平_NOP();SPI_SI=1; /S I -输出一个高平 _NOP();SPI_SCK=0; /SCK 低电平_NOP();return;Void SPI_s
10、endzero()SPI_SCK=1; /SCK 高电平 _NOP();SPI_SI=0 /SI-输出一个低平_NOP();SPI_SCK=0; /SCK 低平:h00000008X0h=cIl Jeqonn l.uo屮眄 _ ()3Cpe8J_|dS Jeqon-|!ujn;aj !()8S0|0_|dS :0dON_ 一鍵孚dun/它二/ du0 买樓 :()0J8zpu8S_|dS 9S|3 L 买樓 :()9uopu8S_|dS (O<(dm 乙®nqM)j! Huo!o<|uo!3c=iuo)joj !()8|qeu8_|dS :h00000008X0h=cIl
11、 jeqon| l.uo ;uin| _ 黔嫌 乙£ 旦!ds/!fecjnq/v jeqon|)乙gM/vTidS PQ/!ujn;aj !()8S0|0_|dS 一鍵孚 dun/它二/ du 0 买樓 :()0J8zpu8S_|dS esp L 买樓 !()8U0pU8S_|dS Iff嫌壕I條 / (O<(diii8PqM)j! Huo!o<!:8=!)JOj !(pi(A)e|qeu8_|dS lAn qgxo二diu peqo n _ Iff嫌 8 Y与!ds (8)nqMjeqon)88i!JM_|dS PjOA !ujn;aj :0dON_Luchar rb
12、uf32=0x00000000;SPI_enable();for(cnt=32;cnt>0;cnt-)SPI_SCK=1;/SCK 高电平 _NOP();if(SPI_SO =1)rbuf32 |=tmp; /判断数据位 tmp /=2;SPI_SCK =0;/ SCK 低电平 _NOP();_NOP();SPI_SCK =0;/ 确保 SCK 低电平 _NOP();SPI_close();return(rbuf32);Luchar SPI_read32()Luint cnt;Luchar tmp="0x8000"Luchar rbuf16=0x0000;SPI_en
13、able();for(cnt=16;cnt>0;cnt-)SPI_SCK=1;/SCK 高电平 _NOP();if(SPI_SO =1)/rbuf316|=tmp;tmp /=2;SPI_SCK =0;/ SCK 低电平_NOP();_NOP();SPI_SCK =0;/ 确保 SCK 低电平_NOP();SPI_close(); return(rbuf16);void GP2_peizhi(void)Luint REG0,REG1,REG2, REG3, REG4,REG5;Lucharchar PU="0X50"/ 设置上电复位指令REG0=0X80008420;
14、校准陶瓷晶振时间为8个32k周期,244.14us.设置高速晶 振上电后一直起振 .设置测量范围 1,自动校准,上升沿敏感REG1=0X81194900;预期 stopl 脉冲数 1 个.计算第一个 stop1-stop2REG2=0X82E00000;开启所有中断源REG3=0x83080000;/REG4=0x84200000;/REG5=0X85080000;/SPI_write8(PU);/上电复位_NOP();SPI_close();/确定 SSN=0SPI_write32(REG0);_NOP();SPI_write32(REG1);_NOP();SPI_write32(REG2)
15、;_NOP();SPI_write32(REG3);_NOP();SPI_write32(REG4);_NOP();SPI_write32(REG5);_NOP();return; /=LCD 通信函数 =/Void LCD_delay(uint m); /LCD 延时程序uint y=0;for(;m>0;m-)for(y=0;y<125;y+);Void LCD_wdate(uchar i );EN=0;RS=1; /寄存器选择口 rs=1 数据选通 0 为指令选通RW=0; /读写使能端 0 为写有效 1 为读有效EN=1; /使能端下降沿有效P2=i;EN=0;delay(300)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年鹰潭辅警招聘考试真题带答案详解(完整版)
- 2023年防城港辅警招聘考试真题含答案详解(考试直接用)
- 2024年娄底辅警协警招聘考试真题含答案详解(考试直接用)
- 2023年秦皇岛辅警招聘考试题库含答案详解(达标题)
- 2024年哈密辅警招聘考试真题及参考答案详解一套
- 2024年亳州辅警招聘考试题库及完整答案详解1套
- 2023年韶关辅警协警招聘考试真题附答案详解(满分必刷)
- 2023年黔南布依族苗族自治州辅警招聘考试真题含答案详解(考试直接用)
- 2023年陕西辅警招聘考试题库含答案详解(研优卷)
- 2026届黑龙江省尚志中学高二上化学期末检测模拟试题含解析
- 危险化学品法律法规培训
- 梦幻丛林教学课件
- 邮政银行校招笔试题目及答案
- 雪糕生产车间管理制度
- 2025年中国节能环保集团有限公司招聘笔试参考题库含答案解析
- 2025年中国邮政联合校园招聘高频重点提升(共500题)附带答案详解
- 小学生珍惜时间主题课件
- 昭苏课件教学课件
- 让问候温暖人心国旗下讲话
- 胃出血检查报告图片
- 国家安全教育高教-第六章坚持以经济安全为基础
评论
0/150
提交评论