超速报警系统的设计与实现(本科毕业论文) - 图文(8)

2019-09-01 20:56

武汉科技大学本科毕业设计

附录A

超速报警器系统主要的程序代码: 头文件部分: #include #include #include\#include #include\#include\#include\

初始化部分函数:

//--------------初始化I/O口-------------// void Init_IO(void) {

DDRK_DDRK0 = 1; //TF卡RESET端 DDRK_DDRK1 = 1; //TF卡CLK端 DDRK_DDRK2=1; //TF卡DATA端 DDRK_DDRK3=0; //TF卡BUSY端 DDRA_DDRA0=1; //用于闪烁报警

DDRA_DDRA6=1; //用作I2C总线的时钟线 DDRA_DDRA7=1; //用作I2C总线的数据线

DDRJ_DDRJ7=1; //利用PJ7测程序执行的时间 }

void Init_portk() {

PORTK_PK0=1; PORTK_PK1=1; PORTK_PK2=1; PORTA_PA0=0; }

- 31 -

武汉科技大学本科毕业设计

//-------------初始化锁相环------------// void Init_PLL(void) {

CLKSEL &=0x7F; //设置OSCCLK作为系统时钟 PLLCTL &=0x8F; //禁止锁相环

//PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1), fbus=PLLCLK/2 SYNR=0xC9; REFDV=0x81;

PLLCTL |=0x70; //使能锁相环 asm NOP; asm NOP;

while(!(CRGFLG&0x08)); //PLLCLK锁定

CLKSEL |= 0x80; //设置PLLCLK为系统时钟 }

信息采集部分:

//----------启动I2C总线函数---------//

void start_I2C() {

unsigned char i;

SDA=1; //发送起始条件的数据信号 for(i=0;i<9;i++) _asm(nop); //1.26us

SCL=1; //起始条件建立时间大于4.7us,延时 for(i=0;i<36;i++) _asm(nop); //5us

SDA=0; //发送起始信号 for(i=0;i<31;i++) _asm(nop); //起始条件锁定时间大于4us延时,4.3us SCL=0;

for(i=0;i<16;i++) _asm(nop); //钳住I2C总线,准备发送或则接受数据,2.2us }

//---------结束I2C总线函数-----------// void stop_I2C() {

unsigned char i;

- 32 -

武汉科技大学本科毕业设计

SDA=0;

for(i=0;i<9;i++) _asm(nop); //发送结束条件的数据信号 SCL=1;

for(i=0;i<36;i++) _asm(nop); //结束条件建立时间大于4us,5us SDA=1;

for(i=0;i<31;i++) _asm(nop); //发送I2C总线结束信号,4.3us }

//---------字节数据发送函数----------// void send_byte(unsigned char c) {

unsigned char i,j;

for(i=0;i<8;i++) //要发送的数据长度为8位 {

if((c<

for(j=0;j<9;j++) _asm(nop);

SCL=1; //置时钟线为高,通知被控器开始接收数据位

for(j=0;j<36;j++) _asm(nop); //保证时钟高电平周期大于4us SCL=0; }

for(i=0;i<16;i++) _asm(nop); //八位发送完后,释放数据线,开始接收应答信号 SDA=1; //SDA是一个双向线,这里似乎有问题?

for(i=0;i<16;i++) _asm(nop); SCL=1;

for(i=0;i<25;i++) _asm(nop); DDRA_DDRA7=0; if(SDA==1) Ack=0; else Ack=1; DDRA_DDRA7=1; SCL=0;

for(i=0;i<16;i++) _asm(nop); }

- 33 -

武汉科技大学本科毕业设计

//---------字节数据接收函数----------// unsigned char receive_byte() {

unsigned char i,j,retc; retc=0;

SDA=1; //置数据线方式为接收方式 for(i=0;i<8;i++) {

for(j=0;j<9;j++) _asm(nop);

SCL=0; //置时钟线为0,准备接收数据位 for(j=0;j<36;j++) _asm(nop); //延时4.7us以上

SCL=1; //置时钟线为高,使数据线上数据有效 for(j=0;j<16;j++) _asm(nop); DDRA_DDRA7=0; retc=retc<<1;

if(SDA==1) retc=retc+1;

for(j=0;j<16;j++) _asm(nop); //读数据位,存入retc中 }

DDRA_DDRA7=1; SCL=0;

for(j=0;j<16;j++) _asm(nop); return(retc); }

//---------应答子函数------------// void Ack_I2C(unsigned char a) {

unsigned char i; if(a==0) SDA=0; else SDA=1;

for(i=0;i<25;i++) _asm(nop); SCL=1;

for(i=0;i<36;i++) _asm(nop); //时钟低电平周期大于4us

SCL=0; //清时钟线,钳住I2C总线以便继续接收

for(i=0;i<16;i++) _asm(nop);

- 34 -

武汉科技大学本科毕业设计

}

//------AD转换通过I2C总线发送命令字节数据函数-----//

unsigned char I2C_send_byte(unsigned char address,unsigned char control_word) {

start_I2C(); send_byte(address);

if(Ack==0) return(0); send_byte(control_word);

if(Ack==0) return(0); stop_I2C(); return(1); }

//----AD转换通过I2C总线读取字节数据函数---// unsigned char I2C_read_byte(unsigned char address) {

unsigned char c; start_I2C(); send_byte(address+1); if(Ack==0) return(0); c=receive_byte();

Ack_I2C(1); //发送非就答位 stop_I2C(); //结束总线 return(c); }

//---------8位精度的AD采集以及I2C总线的实现--------// void sampling_voltage() {

I2C_send_byte(PCF8591,0x43); //ADC1,模数转换2,热敏电阻 voltage_data=I2C_read_byte(PCF8591); }

字模的数据处理部分:

/******************对字模进行坐标变换,使其正确的显示出来*************/ byte data_flag=0;

- 35 -


超速报警系统的设计与实现(本科毕业论文) - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:组胚复习要点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: