电动车跷跷板系统设计.doc_第1页
电动车跷跷板系统设计.doc_第2页
电动车跷跷板系统设计.doc_第3页
电动车跷跷板系统设计.doc_第4页
电动车跷跷板系统设计.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电动车翘翘板电动车跷跷板系统设计王乾坤 孙亚飞 万冉 杨晓雨【摘要】本设计利用mega16单片机为系统的控制芯片,通过角度传感器检测跷跷板摆动角度,在通过ATmega16自身的模数转换把角度转换为数值变化通过PTR8000发送给电动车系统,电动车接收跷跷板平衡检测系统发送的数据,单片机对数据进行智能分析,调整小车前进速度和方向,使跷跷板达到平衡状态。在电动车到达指定位置时,给出声光提示,同时液晶显示屏显示时间和小车当前状态。【关键字】 单片机步进电机 光电传感器 PTR8000无线遥控 A/D转换 液晶屏显示 声音提示Abstract: This design uses ATmega16 microcontroller chip to control the syste。Through the seesaw swing angle sensor detects the angle, in its own through the ATmega16 ADC converts the angle value changes by PTR8000 sent to the electric car, electric car seesaw balanced detection system receives the data sent, single-chip intelligent analysis of the data, adjusting the car forward speed and direction, the seesaw to equilibrium. In electric vehicles arrived at the designated location, to sound and light tips, and the LCD displays the time and the current state of the car.朗读显示对应的拉丁字符的拼音字典朗读显示对应的拉丁字符的拼音字典Keywords: ATmega16 microcontroller Stepper motor Angle sensor D/A converter wireless remote control PTR8000 LCD screen voice prompt 朗读显示对应的拉丁字符的拼音字典目录电动车跷跷板系统设计- 1 -1.功能要求- 4 -1.1项目要求- 4 -1.2项目功能- 4 -2方案论证- 5 -2.1单片机的选择- 5 -2.2电机的选择- 5 -2.3信号传送系统的选择- 6 -2.4 数据显示方式的选择- 6 -3系统框图- 6 -3.1项目原理- 6 -3.2电动车驱动部分的原理与制作- 7 -3.3电动车循迹的原理- 7 -4.系统硬件电路设计- 8 -4.1.1 ATmega16部分- 8 -4.1.2 电动车驱动部分- 9 -4.3.3 翘翘板检测部分- 9 -4.2步进电机的简单介绍- 10 -4.2.1 L298驱动部分- 10 -4.2.3 液晶显示部分- 12 -4.2.4 键盘显示部分- 12 -4.2.5 无线通信PTR8000部分- 13 -5.软件系统的设计- 14 -5.1 程序流程图- 14 -5.2 程序及注释- 15 -5.2.1 主程序- 15 -6遇到的问题- 30 -7总结- 30 -8.考文献- 31 -1.功能要求1.1项目要求设计并制作一个电动车跷跷板,要求跷跷板长1600mm、宽300mm。跷跷板中心固定在直径不大于40mm的圆轴上,圆轴两端支撑在两个支架上,与支架圆滑接触。跷跷板起始端一侧装有可移动的配重物体,配重物体位置可调范围不小于400mm。电动车从起始端出发,按要求自动在跷跷板上行驶。电动车跷跷板起始状态和平衡状态示意图分别如图10.9.1和图10.9.2所示。跷跷板在图10.9.2所示的平衡状态下,跷跷板底距地面或桌面的距离为70mm。1.2项目功能图10.9.1 起始状态示意图图10.9.2 平衡状态示意图1.2.1跷跷板处在图10.9.1所示的状态下(配重物体位置不限制),电动车从起始端A出发,行驶跷跷板的全程。停止5秒后,电动车再从跷跷板的B端倒退回至跷跷板的起始端A,电动车能分别显示前进和倒退所用的时间。前进行驶在1.5分钟内、倒退行驶在2分钟内完成。 1.2.2将配重物体设定在可移动范围中的某位置,电动车从起始端A出发,当跷跷板达到平衡时,保持时间不小于5秒,同时发出声光提示,电动车显示所用的时间。全过程要求在2分钟内完成。 1.2.3将配重物体设定在可移动范围中的某位置,电动车从起始端A出发,当跷跷板达到平衡时,如图10.9.2所示,保持时间不小于5秒,同时发出声光提示,而后再加一个配重物体,电动车能够再次取得平衡,保持时间不小于5秒,同时发出声光提示,电动车显示所用的时间。全过程要求在2分钟内完成。 1.2.4将配重物体设定在可移动范围中的某位置,电动车从起始端A出发,当跷跷板达到平衡时,如图10.9.2所示,保持时间不小于5秒,同时发出声光提示,而后再加一个配重物体,电动车能够再次取得平衡,保持时间不小于10秒,同时发出声光提示,在此时间段内只要跷跷板的平衡被人为破坏,电动车能自动再次找到平衡,并再次保持平衡时间不小于10秒,同时发出声光提示,当保持时间过后,电动车自动返回起始点A,并显示所用的时间。2方案论证2.1单片机的选择方案一:采用传统的89C51芯片为控制核心。具有4KB的程序存储器,128KB的数据存储器,64KB的片外存储器寻址能力,64KB的片外数据存储器寻址能力,32根输入/输出线,1个全双工异步串行口,2个16位定时/计数器,5个中断源,2个优先级。但数学处理能力差,没有ISP下载线及SPI接口,功能单一,运算速度慢,控制过程比较烦琐。方案二:采用Atmega16芯片为控制核心。具有高性能、低功耗以及运算速度快的8位AVR微处理器,32个8位通用工作寄存器,全静态工作,16KB的系统内可编程Flash,内存大、数学处理能力强,上电复位以及可编程的掉电检测,支持扩展的片内调试功能,32个可编程I/O口,功耗小。可通过ISP下载线写入程序,其SPI接口可用于对无线通讯模块的控制,也可以通过SPI口扩展内存。由于Atmega16芯片的程序存储器比较大,接口丰富,扩展功能强,具有可与PTR8000连接的SPI口,且运行速度快。故采用方案二。2.2电机的选择方案一:采用普通直流电机。直流电机具有优良的调速特性,调速平滑、方便,调整范围广;过载能力强,能承受频繁的冲击负载,可实现无级调速。但直流电机控制要求较高,特别是在低速时,很容易出现超调,引起整个系统的震荡.方案二:采用步进电机。步进电机能够快速的启动和反转,也能够快速的停止,转换精度更高,控制更加灵活。由于电动小车以两个步进电机分别与左右车轮同轴相连来作为电动车的动力装置,所以本项目采用步进电机,所以采用方案二。2.3信号传送系统的选择方案一:采用有线发射和接收系统。数据传输量大,控制较为方便,且价格较低;但受到环境的控制,传输距离较短,对使用者造成一定的困扰。方案二:采用PTR8000无线发射与接收系统。超小型、超低功耗、高速率19.2K无线收发器,性能稳定,不受外界干扰。具有接收、发射合一的功能,由于PTR8000的RF协议相关的高速信号处理部分已经嵌入在模块内部,PTR8000可与各种低成本单片机配合使用,也可以与DPS等高速处理器配合使用;PTR8000 提供一个SPI接口,与单片机Atmega16通讯方便。 由于通讯方面的要求和精度,本着实用的原则,我们采用方案二。2.4 数据显示方式的选择方案一:BC7281键盘显示方式。可驱动8位或16位数码管显示或64/128只独立LED。64键的键盘接口,内含去抖功能,具有2种键盘工作模式,适应不同应用需求 。独具光柱译码方式,可独立控制两条64段光柱显示,段寻址功能便于控制独立LED,16位均可独立控制闪烁属性,闪烁速度可调 段驱动极性及移位脉冲时序均可控,可配合各种形式的驱动电路,键盘部分具有键值锁存功能,内部显示寄存器和控制寄存器的内容均可读出2线高速串行接口。方案二:DM12864液晶显示方式。LCD是一种将液晶显示器件、连接件、集成电路、本光源、结构件装配在一起的组件。 LCD有显示容量大、功耗低、人机交流界面更加友好等优点,DM12864汉字图形点阵液晶显示模块,可显示汉字、图形。其内置中文字库和单片机配合使用非常方便。由于本项目需要在最后显示小车的当时状态同时显示时间,所以此项目采用DM12864来显示汉字和时间,故采用方案二。3系统框图3.1项目原理 本系统共可分为两部分:跷跷板平衡检测系统,以ATmega16单片机为控制核心,将角度传感器连接在跷跷板中心的转动轴上以检测跷跷板摆动角度,ATmega16通过自身的模数转换功能将角度传感器检测到的角度变化转化为数值变化,并通过无线通讯模块将数据发送给电动车系统。电动车系统也以ATmega16为控制核心,以两个步进电机分别与左右车轮同轴相连来作为电动车的动力装置,采用光电传感器检测引导线,利用无线通讯模块接收跷跷板平衡检测系统发送的数据,单片机对数据进行智能分析,调整小车前进速度和方向,使跷跷板达到平衡状态。在电动车到达指定位置时,给出声光提示,同时液晶显示屏显示时间和小车当前状态。其原理图如图所示。电动车跷跷板系统原理图3.2电动车驱动部分的原理与制作 如实物图10.9.4所示,在电动车左右两轮上分别配置两个步进电机来作为电动车的动力装置,通过控制两个步进电机的转动方向来控制电动车的前进和后退,通过控制两个步进电机的转速的快慢来控制电动车的转向。电机和车轮之间通过齿轮啮合来传动。在实际制作中,可根据实际情况来选用齿轮来改变它们之间的传动比,以使电动车能获得适当的速度范围。3.3电动车循迹的原理如实物图所示,在电动车的前侧安装两个光电传感器,利用光在不同颜色的物体表面具有不同的反射性质的特点,来判断电动车的行走位置,一般情况下,光电传感器发射的光会被路面反射回来,但如果遇到黑色物体则会被吸收,传感器将接收不到反射光线。单片机就是否收到反射回来的光线为依据来判断黑色引导线的位置和小车的行走路线。电动车的循迹原理图如上图所示当光电传感器没有检测到黑线时,其输出为0。 电动车前进,使用光电传感器1和2,当光电传感器1检测到黑线时,说明电动车向右方偏移,则电动车左轮向后转,右轮向前转,调整小车前进角度,使小车始终保持在黑线上行走。同理,电动车后退,使用光电传感器3和4进行检测。电动小车在行走的过程中,将接收来自跷跷板检测系统的数据,并根据接收到的数据来决定小车的前进和后退以及行进的快慢。4.系统硬件电路设计4.1.1 ATmega16部分与ATmega116相连接的有无线通信PTR8000部分电路,传感检测电路,电动车部分电路。电动车系统中光电传感器寻迹模块、声光报警模块以及按键选择部分的电路原理图,图中的S1、S2、S3和S4为四个光电传感器,left LED和right LED是电动车的转向灯,并和BELL一起构成了电动车的声光报警电路,JP_CHK2按键是选择按键,用以选择电动车执行的任务,JP_CHK按键是确认按键,用以确认电动车是否执行所选择的任务。图中省略了PTR8000通信模块部分的电路图,详见第九章PTR8000无线通信模块部分。 电动车部分电路原理图4.1.2 电动车驱动部分电动车动力驱动部分的电路原理图,图中M1和M2是两个步进电机,分别与为电动车驱动轮的左右两轮相连,图中SMD401是步进电机的驱动模块,该模块的工作电压为+5V,驱动电压为+8V,图中C0、C1、C2、C3四个电容用以滤波,增加驱动模块的抗干扰性能。电动车系统动力驱动部分电气原理图4.3.3 翘翘板检测部分跷跷板角度检测部分的电路原理图(PTR8000部分略),图中A0为角度传感器,单片机通过PA0采集跷跷板角度变化信号,并通过其自身的模数转换器功能将其转化为数字信号,并通过PTR8000无线通信模块发送给电动车系统。跷跷板角度检测部分电路原理图4.2步进电机的简单介绍步进电机是纯粹的数字控制电机,它将电脉冲信号转变成角位移,即给一个脉冲信号,步进电机电动机就转动一个角度,实质上是一种数字/角度转换器,由于输入的是脉冲信号,输出的角位移是断续的,所以又称为脉冲电动机。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)种,永磁式一般为两相,转矩和体积较小,步进角一般为7.5或15;反应式一般为三相,可实现大转矩输出,步进角一般为1.5,但噪声和振动都很大,混合式应用最为广泛,它混合了永磁式和反应式的优点。步进电机系统中有个重要电路:脉冲分配电路和驱动电路。脉冲分配电路有个输入信号:步进脉冲和转向控制。脉冲分配电路在步进脉冲和转向控制信号的共同作用下产生正确转向的激励信号。此激励信号经过驱动电路送至步进电机,从而控制步进电机向正确的方向转动,此激励信号的频率决定了步进电机的转速。脉冲分配可通过脉冲分配器实现,也可通过软件实现。驱动电路的主要作用是实现功率放大,一般脉冲分配器输出的驱动能力是有限的,它不可能直接驱动步进电机,因此需要经过一级功率放大。4.2.1 L298驱动部分恒压恒流桥式2A驱动芯片L298N。L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。L298N可接受标准TTL逻辑电平信号VSS,VSS可接457 V电压。4脚VS接电源电压,VS电压范围VIH为2546 V。输出电流可达25 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。表1是L298N功能逻辑图。由表1可知EnA为低电平时,输入电平对电机控制起作用,当EnA为高电平,输入电平为一高一低,电机正或反转。同为低电平电机停止,同为高电平电机刹停。4.2.2 L297驱动电路L297是意大利SGS半导体公司生产的步进电机专用控制器,它能产生4相控制信号,可用于计算机控制的两相双极和四相单相步进电机,能够用单四拍、双四拍、四相八拍方式控制步进电机。芯片内的PWM斩波器电路可开关模式下调节步进电机绕组中的电机绕组中的电流。该集成电路采用了SGS公司的模拟/数字兼容的I2L技术,使用5V的电源电压,全部信号的连接都与TFL/CMOS或集电极开路的晶体管4.2.3 液晶显示部分LCD是一种将液晶显示器件、连接件、集成电路、本光源、结构件装配在一起的组件。本项目使用的是DM12864汉字图形点阵液晶显示模块,点阵由64行和128列组成,可显示32个汉字和图形。它与ATmega16单片机之间采用串行通信,只需要和单片机接DAT、CLK线、电源和地线即可,因此,连线比较简单方便。连接示意图如下图。4.2.4 键盘显示部分BC7281键盘显示系统结构原理图如下图BC7281与ATmega16单片机的接口共需要三根线,数据线DAT,时钟线CLK按键指示KEY,其中CLK和KEY引脚分别为输入和输出引脚,而DAT脚则为双向口。BC7281最多可连接64个按键,按8*8矩阵排列,矩阵的“行”连接到BC7281的位驱动DIG0-DIG7,矩阵的“列”连接到第0-7位显示的段驱动移位寄存器的输出,为了防止对显示部分的影响,键盘矩阵与显示电路之间必须加入二极管和4.7K的隔离电阻。 4.2.5 无线通信PTR8000部分采用PTR8000无线发送接收模块,专为点对点、点对多点无线通信设计,内置数据协议和CRC检错无乱码输出载波监测输出,只需通过SPI即可完成所有的无线收发传输,无线通信如同SPI通信一样方便。PTR8000有四种工作模式:掉电和SPI编程模式、待机和SPI编程模式、发射模式、接收模式。在待机和掉电模式下PTR8000均不能接收、发送数据,可以用单片机通过SPI接口配置工作参数,将TRX_CE,TE_EN,PWR置高,配置PTR8000为发射模式,只需将PWR拉低,即可转换为接收模式。在发射/接收模式下,单片机通过SPI接口发送和接收数据。PTR8000的四种工作模式如下表工作原理:发送部分:首先要对SPI主机模式的初始化和对SPI口的初始化,允许采用中断。其次是对nrf905芯片的初始化,包括对其发送地址、频率、功率、数据字节的宽度、发送模式、数据等设置。最后是启动发送模式。接收部分:首先要对SPI主机模式的初始化和SPI口的初始化、nrf905的初始化以及中断的初始化。其次是设定接收模式。最后是启动接收模式,并对发送来的数据进行处理。 PTR8000引脚图5.软件系统的设计5.1 程序流程图5.1.1 电动车系统程序流程图5.1.2 跷跷板角度检测系统程序流程图5.2 程序及注释5.2.1 主程序#include #include #include delay.h #include config.h#include spi.h#include nrf905.h#include BC7281.H#include communcation.h#includeLCD_.Hunsigned char gb_keynum = 0; /BC7281按键值unsigned char flag,f=1,g=0,m=1;void bu_q() /定时器0,2启动(步进机启动)TCCR1A|=(1COM1A1)|(1WGM11)|(1COM1B1);TCCR1B|=(1WGM12)|(1WGM13)|(1CS11);void bu_t() /定时器0,2停止(步进机停止)TCCR1A=0x00;TCCR1B=0x00;/*PWM和端口设置*/void init()DDRD|=0x33; /定时器1; PD4,PD5为脉冲输出DDRD&=0xc0; / 传感器的端口 /TCCR1A|=(1COM1A1)|(1WGM11)|(1COM1B1); /TCCR1B|=(1WGM12)|(1WGM13)|(1250) GB_Time2=GB_Time2+1;num=0;if( GB_Time2=60)GB_Time1+; GB_Time2=0; /*循迹*/void findload0() /小车前进if(PIND&0xc0)=0x80) /右传感器检测到(右转)PORTD&=0x02; PORTD|=0x01; OCR1A=4000; OCR1B=4000; if(PIND&0xc0)=0x40) /左传感器检测到信号(左转)PORTD&=0x01; PORTD|=0x02; OCR1A=5000; OCR1B=5000;if(PIND&0xc0)=0x00) /(双轮同时前进) PORTD|=0x03; OCR1A=5000; OCR1B=5000; if(PIND&0xc0)=0xc0) Flag=0;bu_t(); page2(); f=0;delay_nms(5000);g=1; GB_Time1=0; GB_Time2=0; void findload1() /小车后退if(PINC&0xc0)=0x80) /右传感器检测到(右转)PORTD&=0x01; PORTD|=0x02;OCR1A=5000; OCR1B=5000;if(PINC&0xc0)=0x40) /左传感器检测到信号(左转) PORTD&=0x02; PORTD|=0x01; OCR1A=5000; OCR1B=5000;if(PINC&0xc0)=0x00) /(双轮同时前进) PORTD&=0x03; OCR1A=5000; OCR1B=5000; if(PINC&0xc0)=0xc0) Flag=0; bu_t(); g=0; page4(); GB_Time1=0; GB_Time2=0; m=0;void main()init(); spi_init();nrf905_Init(); /初始化8000BC7281_Init(); INT0_Init(); /中断0的初始化 7281INT2_init(); /中断2的初始化 8000 time0_init(); /定时器0初始化SEI(); Show_BC7281(0x00); /上电显示0 page0();while(1)if(gb_rec_data0=0x01)while(f)Flag=1; page1(); bu_q(); findload0(); while(g) Flag=1; page3(); bu_q(); findload1();if(gb_rec_data0=0x02)if(gb_rec_data30x8e)page5();Flag=1;bu_q();findload0(); if(gb_rec_data3=0x6c)|(gb_rec_data3=0x8e) while(m)bu_t();page6();Flag=0;delay_nms(5000);bu_q();findload1(); Nrf905.h头文件#include #include #include delay.h #include config.h#include spi.h#include nrf905.h#include BC7281.H#include communcation.h#includeLCD_.Hunsigned char gb_keynum = 0; /BC7281按键值unsigned char flag,f=1,g=0,m=1;void bu_q() /定时器0,2启动(步进机启动)TCCR1A|=(1COM1A1)|(1WGM11)|(1COM1B1);TCCR1B|=(1WGM12)|(1WGM13)|(1CS11);void bu_t() /定时器0,2停止(步进机停止)TCCR1A=0x00;TCCR1B=0x00;/*PWM和端口设置*/void init()DDRD|=0x33; /定时器1; PD4,PD5为脉冲输出DDRD&=0xc0; / 传感器的端口 /TCCR1A|=(1COM1A1)|(1WGM11)|(1COM1B1); /TCCR1B|=(1WGM12)|(1WGM13)|(1250) GB_Time2=GB_Time2+1;num=0;if( GB_Time2=60)GB_Time1+; GB_Time2=0; /*循迹*/void findload0() /小车前进if(PIND&0xc0)=0x80) /右传感器检测到(右转)PORTD&=0x02; PORTD|=0x01; OCR1A=4000; OCR1B=4000; if(PIND&0xc0)=0x40) /左传感器检测到信号(左转)PORTD&=0x01; PORTD|=0x02; OCR1A=5000; OCR1B=5000;if(PIND&0xc0)=0x00) /(双轮同时前进) PORTD|=0x03; OCR1A=5000; OCR1B=5000; if(PIND&0xc0)=0xc0) Flag=0;bu_t(); page2(); f=0;delay_nms(5000);g=1; GB_Time1=0; GB_Time2=0; void findload1() /小车后退if(PINC&0xc0)=0x80) /右传感器检测到(右转)PORTD&=0x01; PORTD|=0x02;OCR1A=5000; OCR1B=5000;if(PINC&0xc0)=0x40) /左传感器检测到信号(左转) PORTD&=0x02; PORTD|=0x01; OCR1A=5000; OCR1B=5000;if(PINC&0xc0)=0x00) /(双轮同时前进) PORTD&=0x03; OCR1A=5000; OCR1B=5000; if(PINC&0xc0)=0xc0) Flag=0; bu_t(); g=0; page4(); GB_Time1=0; GB_Time2=0; m=0;void main()init(); spi_init();nrf905_Init(); /初始化8000BC7281_Init(); INT0_Init(); /中断0的初始化 7281INT2_init(); /中断2的初始化 8000 time0_init(); /定时器0初始化SEI(); Show_BC7281(0x00); /上电显示0 page0();while(1)if(gb_rec_data0=0x01)while(f)Flag=1; page1(); bu_q(); findload0(); while(g) Flag=1; page3(); bu_q(); findload1();if(gb_rec_data0=0x02)if(gb_rec_data30x8e)page5();Flag=1;bu_q();findload0(); if(gb_rec_data3=0x6c)|(gb_rec_data3=0x8e) while(m)bu_t();page6();Flag=0;delay_nms(5000);bu_q();findload1(); Communication.h头文件unsigned char gb_rec_data4=0;void INT2_init(void) /INT2初始化 CLR(DDRB,PB2);SET(PORTB,PB2);SET(MCUCSR,ISC2); /INT2 的上沿产生异步中断请求GICR|=1INT2; /开INT2中断#pragma interrupt_handler int2:19void int2(void)unsigned char i = 0,t=0,n=0,m=0;nrf905_ReadData(RRP,SIZE); /读数据nrf905_RxOn(); /转为接收模式/for(i=0;i4;i+)/ /gb_rec_data1=RxBuf1; /gb_rec_data2=RxBuf2; / /*show_key_num(1,rec_data0);show_key_num(2,rec_data1);show_key_num(3,rec_data2);show_key_num(4,rec_data3);*/ gb_rec_data0=RxBuf0; /接收按键值 gb_rec_data3=RxBuf3; /接收模拟量值 t=gb_rec_data3/100; /百位 m=gb_rec_data3%100/10; /十位 n=gb_rec_data3%100%10; write7281(0x15,(0x20+(t&0x0f); write7281(0x15,(0x10+(m&0x0f); write7281(0x15,(0x00+(n&0x0f); Show_BC7281(gb_rec_data0); / Show_BC7281(gb_rec_data0); / Show_BC7281(gb_rec_data2); / Show_BC7281(gb_rec_data3);Spi.h头文件void spi_init(void) /SPI口的初始化 unsigned char temp = 0;PORTB = 0x54; DDRB = 0xBB; /SPCR = 0xD1; /SPI中断允许,SPI允许,主机模式,MSB,极性方式00,1/16系统时钟速率 SPCR = 0x51; /不使用SPI中断,其它同上 SPSR = 0x00; /setup SPI temp = SPSR; /! temp = SPDR; /清空SPI,和中断标志,使SPI空闲 unsigned char SPI_WR(unsigned char val) /用SPI口收发数据 unsigned char temp;SPDR=val;while (SPSR&(1SPIF)=0);temp=SPDR;return temp;BC7281.h头文件/-BC7281与ATmega16连接端口定义/CLK-PA7 DAT-PA6 INT-INT1#define ksetclk PORTA|=(17) /时钟置1#define koutclk DDRA|=(17) /时钟置输出#define klowclk PORTA&=(17) /时钟清0#define kinclk DDRA&=(17) /时钟置输入#define ksetdat PORTA|=(16) /数据置1#define koutdat DDRA|

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论