CT107D编程手册全文_第1页
CT107D编程手册全文_第2页
CT107D编程手册全文_第3页
CT107D编程手册全文_第4页
CT107D编程手册全文_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

10口编程

10编程,该开发板使用了573锁存器,通过P2口的5,6,7位连接3-8译

码器,扩展出了8个口,其中4个口分别连接4个573锁存器,这里以LE

D的锁存器来举例:

原理图573:

分析代码:

P2=((P2&0x1f)I0x80);

其中0x1f=00011111,P2与。x1f进行与运算,高三位清零,其余位

保持原来状态,不改变,即把控制3-8译码器的高三位留出来:

接着再或上0x80;容易发现0x80=10000000;或运算,与1或结

果为1,与0或结果不变,所以或上0x80只需看P2的高三位,则高三

位为100,对应3—8译码器的话,P2人7=1;P2”6二0;P2”5二

0;

所以输出Y4=0;Y4再经过与非运算,看下图示:则输出Y4c=1;即

LED对应的锁存器的片选信号被选中,锁存

器打通,接下来就可以对P0口进行操作,操作完之后,

P2=P2&0x1f;P2高三位直接清零,此时Y4c=0,则把锁存器锁上

To

类似的方法,数码管、蜂鸣器等都是如此操作,

选中锁存器代码:

P2=((P2&0x1f)|(这里填对应锁存器的位移号))。

二、数码管动态扫描和定时器

数码管显示分为段选和位选,

数码管定义和显示函数:

Codeunsignedchartab[]

(OxcO,0xf9,0xa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90);

unsignedchardspbuf[]={10,10,10,10,10,10,10,10);

unsignedchardspcom=0;

voiddispIay()

(

接着定时中断函数和优先级:定时器0

voidisr_timer_0(void)interruptI下面是模块化的函数:void

UartInit()

SCON=0x50;

TMOD|=0x20;

TH1=256-(SYSREMCL0CK/BAUDRATE/384+;

ES=1;

TR1=1;

EA=1;

)

voidUartSend(unsignedchar*pBuff,intlength)

(

unsignedchare;

inti=0;

for(i=0;i

c=pBuff;

SBUF=c;

whiIe(T1==0);

TI=O;

接收数据可以这样写:

定义全局变量:

unsignedcharuart_buf[100];初始化的函数就是如此写;

adc_pcf8591的协议:

依次是:start/1cy发送读地址0x91、等待应答、读回AD转换后的数值、

读回后发送应答给PCF8591,表示收到,并且不需要再返回应琴,要传参数

1,如图红圈示,即函数Ack⑴;、最后stop〃C总线。

D/A转换(其实挺麻烦,先前太自信了,哈):

所谓D/A转换其实就是把数字信号转换成模拟信号输出,用单片机发数字通

过D/A转换限电压输出,检测的方法可以用电压表测量。

配置的方法跟A/D类似,先发地址字节,再发控制字节,然后把数字发出去

(AD这里是接收模拟信号,是相反的机制)。

控制字节:

如图示,控制字节的第6位是1的话是模拟输出模式,其余位全为0,发送格

式品艮AD一样:

代码如一开始图示。

(2)EEPROM的使用,AT24co2,可以掉电依旧保存上一次操作

的数据,下次上电后接着运行。

需要注意两个函数,一个是写进EEPROM里面保存,再次上电再从里面读回

来:

其中写函数需要指定AT24co2的也址以及需要写入的数据,读函数要想取回

写进的数据,需要从相同的地址里面读:

其中AT24co2的存储地址是0x00,可以是其他地址,如0x02,但是读和写的

地址必须一致。

写与读的协议与AD或D)相同,由芯片资料及原理图知EEPR0M(A

T24co2)的写地址为Oxa0;读地址为0xa7;注意:读数的时候读出一

个数之后发送一个应答信号,CK(0)表示还想继续读下一个字节,若/GK

(1);则不想再读数,让EEPR0M停止发送。

人、DS18B20时钟芯片的使用

比赛有提供代码,只需记住这个函数:

读取温度值,整数(其中,提示EA总中断要打开、关闭,也可以不用)。

浮点、数的表示。

注意,只有提供函数,没有提供读取温度的函数,即上面的那个,只有下面:这

几个函数。

编写读取温度的函数需要记住DS13B20的三条指令,OxCC,跳过ROM检测;然

后启动温度转换:0x44;转换需要时间,这里精确延时De/ay_OneIV/re

(200);再次执行跳过,然后读取温

度指令:OxBE.;注意读出的温度是低字节先,然后才是高字节,分别用两个变

量保存还要通过公式转换成我们需要的整数或浮点数。完整代码如上图示。

九、超声波传感器的使用

include〃〃/隹文51单片机特殊功能寄存器

,•//,,,,

include

//include

〃12M用这个

〃用这个

"definesomenop{nop();nop。;nopOnop();nop();

_nop_O:_nop_0;)

sbitTX=P1〃发射引脚

sbitRX=P1〃接收引脚

codeunsignedchartab口

(OxcO,0xf9,0xa4,OxbO,0x99,0x92,0x82,0xf8,0x80f0x90,/

Oxff);

unsignedchardspbuf[8]={10f10,10,10,10f10,10,10);//显

示缓冲区

unsignedchardspcom=0;

unsignedintintr=0;

bits_flag;

unsignedintt=0;

voidsend_wave(\void);

voiddisplay(void);

voidmain(void)

I(

unsignedintdistance;

TMOD/=0x11://配置定时器工作模式

THO=(65536-2000)/256;

TLO=(65536-2000)%6;

TH1=0;

TL1=0;

EA=1;

ETO=1;〃打开定时器O中断

whiIe(1){

if(s_flag)

s_flag-0;

t=TH1;

t«=8;

t/=TL1;

distance(unsigned

int)Ct*;〃it算距

}

TH1=0;

TL1=0;

dspbuf[5]=distance/100;

dspbuf[6]=distanceO/1O;

dspbuf[7]=distance;

}

〃定时器0中断服务函数

vo/disr_timer_0(void)interrupt1//默认中断优先级1

(

THO=(65536-2000)/256;

TLO=(65536-2000)%6;〃定时器重载

display();//2ms执行一次

if(++intr—200){

s_flag-7;

intr-0;

〃显示函数voiddispIay(void){

XBYTE[OxEOOO]=Oxff;〃去除鬼影

XBYTE[OxCOOO]=(1«dspcom);

XBYTE[OxEOOO]=tab[dspbuf[dspcom]];

7f(++dspcom==8)

dspcom=0;

//TX引脚发送40KHz方波信号驱动超声波发送探头

vo/dsendwave(void)

unsignedchari=8;//发送8个脉冲

do

TX=

somenop;

TX=0;

somenop;

)

whiIe(i一i);

)

必要时还可以加个看门狗:WDT_C0NTR=0x34;

十、步进电机与直流电机的使用

参考代码如下:

#include

sbitA1=P1N;//定义步进电机连接端口

sbitB1二P厂3;

sbitC1二P「2;

sbitD1=P11;vo/dqudong1();

^defineDy_A1(A1=1;B1==0;C1=0;D仁0;}//A相通电,其他相断电

7defineDy_B1{A1=0;Bl=1;C1=0;Djt0;}//B相通电,其他相断电

八defineDy_C1{A1=0;B1=0;C1=1;D1=0:}//C其他相断电

^defineDy_D1{A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断

电〃采用1相励磁

^defineDy_OFF{A1=0;B1=0;C1=0;D1=0;}//H电

unsignedcharSpeed,Speed1;

voidDe/ayUs2x(unsignedchart)

/

I

whiIe(----1);

voidDelayMs(unsignedchart)

whiIe(t--)

〃大致延时1mS

De!ayUs2x(245);

De/ayUs2x(245);

main()

Dy_OFF;

for(;;)

qudong!();

voidqudong!0unsignedint/=470;〃旋转—周时间

Speed=5;

wh1Ie(i-)〃正向

Dy_A1

〃遇至寸Coi!_A1用{A1=1;B1=0;C1=0;D1=0;)代替

DeIayMs(Speed);

〃改变这个参数可以调整电机转速,

〃数字越小,转

速越大,力矩越小

Dy_B1

〃顺序从A1—D1相通电如果为正转,叫〈么)顿序从D1—A1相通电则为

反转

DelayMs(Speed);

Dy_C1

DeIayMs(Speed);

Dy_D1

DeIayMs(Speed);

}

Dy_OFF

i=512;

whiIe(/--)〃反向

Dy_D1〃遇,到CoI!_A1用

(A1=1;B1=0;C1二0;D1:0:}代替

DelayMs(Speed);〃改变这个参数可以调整电

机转速,

〃数字越小,转速

越大,力矩越小

Dy_C1

DelayMs(Speed);

Dy_B1

DelayMs(Speed);

Dy_A1

DelayMs(Speed);

直流电机:

#include

"defineuintunsignedint

voiddrive0;

voiddelay(uint);

sbitdJ1=P1。〃电机,1引脚

umtset;〃set为电机转角标志位unsignedcharangle,angleI;

//angle为电机PWM变化打角

voidTimeOInit()〃中断初始化

TM0D=0X01;

1E=0X82;

THO=(65536-58)/256;

TLO=(65536-58)%6;

TR0=1;

)

vo/dmain()〃

温馨提示

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

评论

0/150

提交评论