cocoguojia iap15w4k58s4开发板之入门有库_第1页
cocoguojia iap15w4k58s4开发板之入门有库_第2页
cocoguojia iap15w4k58s4开发板之入门有库_第3页
cocoguojia iap15w4k58s4开发板之入门有库_第4页
cocoguojia iap15w4k58s4开发板之入门有库_第5页
已阅读5页,还剩63页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

写面的啰嗦 基础 第三章ADC篇—名10位 第四章UART篇—官 第七章WDT篇—一丝不苟的看门 第八章I2C篇—飞饼之挂 进阶 第十二章红外学习—玩转................................................................................................... 写在后面的啰嗦 cocoguojia_IAP15W4K58S4开发板的一切资料都开源我的云ID为 我的淘宝IDcocoguojia_IAP15W4K58S4开发板的写面的啰嗦先从STC12C5A60S2说起(STC15F2K60S2他老爹),这个应该算STC的不到6元。笔者也用过这个干过好多项目……挣了不少买尿不湿的钱。STCSTC15F2K60S2,好比汽车里的速腾,2个完STC2Kram(比12C多了1K),直接都带八10ADC功能(12C要后缀AD的,且价格也高点)35MHz(12C内部最高17MHz27MHz据说),带苏格兰牧羊犬(12C无看门狗),最多可以造5个UART,虽然有3个是分时复用有点太监,但毕竟可以满足大部分应用了,定时器无论从数量(6个)还是质量上都有了新的提高(12C4个)20154Tao宝上查看了一下,STC15F2K60S2直插40脚 贴片44脚STC12C5A60S2直插40脚 贴片44脚之后我又发现STC又出了款IAP15W4K58S4,好比汽车里的途锐,在STC15F2K60S2的基础上去掉了2,添加了6路独立的 而且有4个完全独立的串口,还有usb直接和仿真的特性,在STC光荣毕业并量产,笔者2015年5月在某Tao宝上查看了一下,总之根据笔者近视350度的双眼判断IAP15W4K58S4有替代STC15F2K60S2在STC上能到“STC15系列库函数与例程测试版V2.0”这PDF等的M3STM32,STST函数库供给350度的双眼再次判断库函数操作有替代寄存器逐一设置的节奏。然而“STC15V2.015F系列的库函数,所以本人本人根据STC库函数,再结合从STC-ISP-685D.exe软件头文件里得STC15WSTC/IAP15W4KxxS4系列的函数库,cocoguojiaSTC15W4K58S4库函数。这先看图IAP15W4K58S4IAP15W4K58S4是STC公司在STC15F2K60S2基础上新添了一些、CMP、T3、FLT功能;并且把2功能去掉(一句话就是加了6路独立的(从2到7)和一个比较器(CMP),去了的第二路当然这2个FLASH和RAM大小不一样,IAP15W4K58S4还仿真和usb直接这些STC15F2K60S2没有的特点,但这些都不影响库的使用,在这里当然看图中管脚定义P2^7这个管脚,在15F2K60S2中是2_3功能,但在IAP15W4K58S4中没了或者我们也可以理解为换成了2_2;P3^7这个管脚,在15F2K60S2中是2/2_2功能,但在有的,所以IAP15W4K58S4是可以用STCSTC15系列库的IAP15W4K58S4又有仿真的特性,使得我们开发起来又添一法Usb可以直接程序的特点,方便我们升级程本人根据STC库函数,再结合从STC-ISP-685D.exe软件头文件里得到------------cocoguojia15W4KxxS4V1_00cocoguojia15W4KxxS4库函数V3_01版等……cocoguojia_IAP15W4K58S4开发板--介配套资料基于cocoguojia_IAP15W4K58S4开发cocoguojia_IAP15W4K58S4之有C文件本人根据STC库改的STC/IAP15W4KxxS4cocoguojia15W4KxxS4库函数Vx_xxVx_xx时为准,更新不一一通知,但我会在云更新,并库函数详细讲解内也有开发板讲解cocoguojia_IAP15W4K58S4之有库原理cocoguojia_IAP15W4K58S4之有PCB的彩色pdf版本分上下cocoguojia_IAP15W4K58S4之有PCB_TOP.pdfcocoguojia_IAP15W4K58S4之有PCB_BOTTOM.pdfSTC一些常用工具软件cocoguojia_IAP15W4K58S4之有soft文件再次强调料都开源,我的云ID为:cocoguojia资料 ID本“cocoguojia_IAP15W4K58S4之有库.pdf”【基础篇】由于目的是把LED(滑动变阻器)里面会有24C02、OLED显示、驱动蜂鸣器奏乐、红外学习、SD等的都是的小c程序,进阶篇有几个中型c程序,呵呵ID:cocoguojia_15W4KxxS4系列的库函数,其实库函数对于我们写程序来说就像小时候我们学数学时背的小九九,背/应用熟练了,算数/写程序就很方便写面重要的话 之前的,可见其重要性,看题目,大家也该想到这是很重要的。cocoguojia在写这个文档和写程序的时候,遇到了不少问题,有时候甚至怀疑本身是否有免再犯cocoguojia范过的错误。cocoguojia范的错误:其实我本来挺注意着点的,只要用到就马上设置一下,让P37是2IOUSART1TXD_2,我忘了设置这个管脚变成一样(和你最后设置波特率的那个串口波特率一样)cocoguojia却把两个公用一个定时器的串口设置了2个波特率,结果总是有一个串口错误TMER2溢出脉冲作为时钟源的话,那么串口的波特率发生器就别再选用TMER2了,否则将会出错u8 u16addr=0X08+MOVC_ShiftAddress;原来是因为USBch340将电通过3管脚传给了单片机,但具体为什么这样这个ADC实验不能仿真(全速和在其中设置断点都不行)基础篇注意基础篇的C例程文件里只包括基础篇要用到的库函数,有些用不到的库“cocoguojia15W4KxxS4库函数Vx_xx版”文件夹里,有所有的全的库第一GPIO篇—忠实爪牙u8GPIO_Inilize(u8GPIO,GPIO_InitTypeDef 当然我们可以起别的名字比如我们都喜欢niuB那么可以 我们最终选择了低调模式 在H里有结构的里有2个u8u8Mode; //IO模式,u8 H#define0123//IO//IO//IO//IO//IO//IO//IO//IO#define 比如 IO{ =GPIO_Pin_All;//全部的7位管 GPIO_InitStructure.Mode //GPIO_InitStructure.Mode //初始化我要设置口 //初始化我要设置P4}PX(X=12345)初始化,就是在赋值的时候我们u8GPIOIniliz(u8GPIPIO_IniTypDf*GPIOx)函数可以不用看懂里面是怎么实现的,但要会用,会在调用之前初始化结构体的u8,会调用此函K了其实大家也可以学下这个函数库的风格,自己仿造它的,咱们自己stc各个寄存器和功能更加熟悉了,又便于自己以再补充一句,C文件好比一个威风凛凛的将军,H文件就好比这个将军盔甲大招坐骑颜值等附加说明,等等…颜值就算了,长的帅绝对渣男绝对坏,长得帅一定死的非常快皮囊下……//#define //#define //#define /#define #define L即24MHZ内部晶想用多大的晶振就设置多大,其它的选项用8MHz的那么我们就定义一个#define 同时也别忘了,见下图所示 ,这样编译器在编译C和H文件时,首先会在 下面我们用开发板(LED和按键部分)来做个实验更完全和更清晰的原理图请参见cocoguojia_IAP15W4K58S4之有开天辟地之大地的裂变开始了,但我们的第一个程序和“sayo”无LED1234--见cocoguojia_IAP15W4K58S4之有C-基础篇实验--见cocoguojia_IAP15W4K58S4之有C-基础篇实验laoB实验--GPIOeasyniuBNB就坚持往下学或者买个NB鞋穿(这个看起来比”脚”牛B),在此打个,我还有个PDF“cocoguojia_IAP15W4K58S4之进阶有道.doc”里面讲的是难度稍微大点的功能第二章 篇(基础应用部分)—听话的小闹TIMER.CH,C里voidtimerX_intvoidinterruptTIMERX_VECTORX=0123TIMERu8Timer_Inilize(u8TIM,TIM_InitTypeDef一个是u8TIM,可以是Timer0Timer1Timer2代表在给不同的定时器初始化注意在H文件里有Timer3Timer4,但u8Timer_Inilize(u8 TIM_InitTypeDef*TIMx)没有Timer3Timer4的初始化(可能在高版本的库函数里有支持吧,STC给力后就有了,或者自己仿造Timer012来写Timer34)TIM_InitTypeDef*TIMx,又见结构体,大家是不是有些u8Timer_Inilize(u8TIM,*TIMx)之前,先定义结构 typedef{u8TIM_Mode;u8TIM_Polity;u8TIM_Interrupt;u8TIM_ClkSource;u8TIM_ClkOut;u16TIM_Value; u8TIM_Run;}u8TIM_Mode:TIM_16Bit,16为不重装TIM_8BitAutoReload,8位自动重装TIM_16BitAutoReloadNoMask;16位自动重装并且不可中我们单挑出来TIM_16BitAutoReloadNoMask说一说不可中断的特EA/IE,ETx/IE(x=012下同),ETx/IE,就算在ETx/IE也没有,该中断会一直起作用;还有更牛X的,就是说u8TIM_Polity;PolityHigh高优先级PolityLowu8TIM_Interrupt; u8 u8TIM_ClkOut;,T2P3.0脚输出,Fck2=1/2T2溢出率T1P3.4脚输出,Fck1=1/2T1溢出率T0P3.5脚输出,Fck0=1/2T0u16 u8TIM_Run; 比如timer0中断函数,可以这样写:voidtimer0_int(void)interrupt自己的应用代码即可,比如在timer.c里就有voidtimer0_intvoid)interruptTIMER0_VECTORvoidtimer1_intvoid)interruptTIMER1_VECTORvoidtimer2_intvoid)interruptTIMER2_VECTORLED1每1分钟改变亮灭状态一次LED2每1s LED3每100ms改变亮灭状态一--见cocoguojia_IAP15W4K58S4之有C-基础篇实验第三章ADC篇— 10位ADC810在H文件里有typedefstruct{u8u8ADC_Speed;u8u8ADC_AdjResult;u8ADC_Polity;u8}u8ADC_Px;710…ADC_P17选中P17这个管脚当做ADCP10P15P16这3个管脚为ADC功能的话可以用或即看例子: =ADC_P10|ADC_P15u8ADC_90TADC时钟为90个主时钟周期ADC_180TADC180个主时钟周期ADC_360TADC360个主时钟周期ADC_540TADC540u8ADC_Power;时钟控ADCADCu8u8ADC_Polity;PolityHigh高优先级PolityLowu8ADC_Interrupt; 允许ADC中断 ADC中断再看 ADC_PowerControl(u8形式参数u8pwrENABLEADC时钟u16Get_ADC10bitResult(u8ADC_CH0到ADC_CH7来选择哪路的ADC返回参数为u16型返回ADC值至于ADC的对齐方式面u8 7路ADC任何一路ADC中断都会进入到这个函数里(EA=1ADC)A--6是选择P16ADCADC实验当短路帽插在T--2T—1上时是选择MCU24MHz晶振的下面那三行G—G是平时放用的也是地的输出端用示波器的时候这里可以夹着ADC4个LED4位十六进制的亮灭LED1是最LED4是最低--见cocoguojia_IAP15W4K58S4之有C-基础篇实验第四章UART篇 官UART章节希望童鞋好好掌握,UART是对外的输出接口,好多传感器或者先看USART.CH,在C里,u8USART_Configuration(u8UARTx,COMx_InitDefine*COMx)为串口初始化函数,两个串口的初始化都归这个部部长管辖,在H文件里有COMx_InitDefine结构的定义u8UART_ShiftRight,串口工作于同步方式仅用于UART1 8位可变波特率 9 9u8 使用TMER2作为波特率发生器u329600ul38400ul115200ululunsigned u8u8u8UART_Interrupt;u8UART_Polity;u8//切换端口UART1_SW_P30_P31,UART1UART1_SW_P36_P37,UART1_SW_P16_P17(此时必须使用内部时钟)对于UART2_SW_P10_P11,UART2UART2_SW_P46_P47,u8RXDTXD做中继,RXDwhatTXDwhat,UART1就是voidTX1_write2buff(u8dat)//写入发送缓冲,指针+1voidTX2_write2buff(u8dat)//写入发送缓冲,指针Cu8xdataTX1_Buffer[COM_TX1_Lenth];//发送缓冲u8xdataTX2_Buffer[COM_TX2_Lenth];//发送缓冲 H#define #defineCOM_TX2_Lenth typedefstruct{//}其中COM_TX1_Lenth是定义发送缓冲的大小的,COM_TX2_Lenth同理数据都往这里放,COM1.TX_read发送读指针,它指向TX1_Buffer中已经发送完毕并且上次刚发送完毕的元素的下一个元素,COM1.TX_write发送写指针,它指向TX1_Buffer中还没有发送并且上次刚刚写入要发送的元素的下一个COM1.B_TX_busy忙标志它为1时表示UART1现在正在发送数据并且还没voidTX1_write2buff(u8dat)这个数voidTX1_write2buff(u8dat)写入发送缓冲,指针{TX1_Buffer[COM1.TX_writedat;//装发送缓冲 1.TX_write>= COM1.TX_write=if(COM1.B_TX_busy //空闲{COM1.B_TX_busy //标志忙TI //触发发送中断}}要发送的是dat,所以我们先把dat写入发送缓冲TX1_BufferTX1_Buffer里面元素那么多,我们要写进哪一个元素呢?当然要靠COM1.TX_write这个来帮助了,COM1.TX_write见前面的说明:它指向TX1_Buffer中还没有发送并且上次刚刚写入要发送的元素的下一个元素),哦,原来他之前的元素都是要发送的,这个就像个列队(有的童鞋有关UART的列队说明---一下了,什么都有的),那么我把dat放在COM1.TX_write这里TX1_Buffer[COM1.TX_write]=dat;我这dat不就也排dat排上队了,那么COM1.TX_write就要++;因为这个队伍里多了一个有了if( 1.TX_write>=COM_TX1_Lenth)COM1.TX_write=0;就是说如果dat是被赋值到TX1_Buffer[COM_TX1_Lenth-1]这个元素,由于TX1_Buffer[COM_TX1_Lenth-1]这个元素是数组TX1_Buffer的最后一个元素,所以COM1.TX_write我要指向TX1_Buffer[0],你可以更改或者检查一下发送空闲标志COM1.B_TX_busy(这个在下文介绍UART1中断UART1没有发送任何数据,那么我就得触发一也不会理睬的,我就软件置位TI,当然我触发了中断,UART1就会发送数据,那发COM1.B_TX_busy //标志忙TI //触发发送中断voidUART1_int(void)interruptUART1_VECTOR{//{TI=if(COM1.TX_read!={

SBUF=TX1_Buffer[COM1.TX_read]; 1.TX_read>= COM1.TX_read=}elseCOM1.B_TX_busy=}}COM1.TX_read=0COM1.的下一个元素和上次刚刚写入要发送的元素的下一个元素位置是一样的那么就COM1.B_TX_busy我就把当前要发送的元素TX1_Buffer[COM1.TX_read]给SBUF 1.TX_read>=COM_TX1_Lenth)COM1.TX_read=0;我刚发送了TX1_BufferTX1_Buffer[COM_TX1_Lenth-1]了吗,如果现在COM1.TX_read=COM_TX1_Lenth,那么我们就得让它指向0,即COM1.TX_read=0;voidPrintString1(u8*puts)这个函数,这个函数的作用就是用串口UART1发送一个字符串(字符串都是以空字节结尾的,u8*puts一定要指向以空C毕竟STC这个接收库是有应用局限的,满足一般的应用,有些应用这个STCUART接收库做不到。{RI=if(COM1.B_RX_OK=={ t>=COM_RX1_Lenth) t=0;[2] t++]=SBUF;[3]COM1.RX_TimeOut=}} u8RX_TimeOut; u8B_RX_OK; //接收块完成1=完成COM_RX1_Lenth B_RX_OK1,所谓接收块mcu通过条件判断知道我所接收的数B_RX_OK=1(在处理分析即可)B_RX_OK0接收缓冲区RX1_Buffer[],我们每接收到一个字节,都会放到这里,并且t也会自加一,如果tCOM_RX1_Lenth,那么t=又转到开头了,COM_RX1_Lenth接收时间超时,我们设置一个最大的时间计数TimeOutSet1,处理接收5ms就会检查一下是否有数据,每次检查是否有RX_TimeOut--,如果有数据我们可以先不进行数RX_TimeOut=05×TimeOutSet1毫秒都没有收到数据了,为这是个完整的数据包,我们每2ms检测一下是否接收到数据,则TimeOutSet1=10即if(COM1.RX_TimeOut>{ 1.RX_TimeOut=={ t>{}}}}接收的库,自己改成适合自己的C代码下面我们用开发板(USB2DB9串口)来做个实验USB连接电脑,序还可以,就是usb程序时,内部晶振不能在isp上调节(调节也没用),默--见cocoguojia_IAP15W4K58S4之有C-基础篇实验lamplight1”LED1lamplight2”LED2lamplight3”LED3“lamplight4LED4“lamplight0LED1234--见cocoguojia_IAP15W4K58S4之有C-基础篇实验1P36P37500ms发送一次”UART1_2”--见cocoguojia_IAP15W4K58S4之有C-基础篇实验另外,在库函数里还有模拟串口发送库函数片机的任意IO口都可以当串口用(虽然这个串口是个半残,但有时也很管用啊) BitTime(void)这个是个延时函数,根据不同的晶振来确定延时,里MAIN_Foscconfig.h里有预定义,cocoguojia接就用这个函数也是OK的 TxSend(u8dat)模拟串口发送一个字节。9600,N,8,1注意波特率是9600哦,如果你想用不同的波特率,那么你就自己改改voidvoidPrintString(unsignedcharcode*puts)模拟串口发送一串字符串。N,8,1第五EEPROM篇—忠实的记录员 EEPROM512STCEEPROM怎么说呢,每次要写都要擦512字节,就算我要写一个字先看EEPROM.C(H里就是全局函数的,没啥好看的)在C DisableEEPROM(void)EEPROM,这个函数虽然在H里有,但一般我们不用它,它是给以下要介绍的EEPROM函数调用的描述:从指定EEPROM首地址读出n个字节放指定的缓冲.u16EE_address: 读出EEPROM的首地址.u8*DataAddress:读出数据放缓冲的首地址.u16number: 据所用类型的文档来确定EEPROM的具体地址范围,比如在我程序里设置EEPROM字节数为2K,所用EEPROM的范围就在0~2047也就是说u16voidEEPROM_SectorErase(u16把指定地址的EEPROM扇区擦除. 这里要说明voidEEPROM_write_n(u16EE_address,u8*DataAddress,u16u16EE_address: 写入EEPROM的首地址.u8*DataAddress:写入源数据的缓冲的首地址u16number: 写入的字节长度.注意:它要注意的同EEPROM_read_n函EEPROM_write_nEEPROM_SectorErase再调EEPROM_SectorErase函数来擦除这个扇EEPROM_write_n把下面我们用开发板(LED1234)来做个实EEPROM里保存一个数,这个数每次上电复位时都自加一,等到这个数等于17的时候,就再把它写为0,如此循环LED1234就来表示这个数的大小,二进制方式表示,比如这个数为10则LED1亮LED2灭LED3亮LED4灭 亮就表示1则二进制就是--见cocoguojia_IAP15W4K58S4之有C-基础篇实验第六EXIT篇—快速反应IAP15W4K58S4一共5EXT_INT5/INT0123voidExt_INTx(void)interrupt (x=0123(EA=1并且对应的EXIT中断使能了)在这里可以添加你要在中断里干的事,u8Ext_Inilize(u8EXT,EXTI_InitTypeDef*INTx)EXIT外部中H中有EXTI_InitTypeDef结构体定typedef{u8 //中断模式 u8EXTI_Polity; u8EXTI_Interrupt; //中断允许ENABLE,DISABLE}u8EXT_MODE_RiseFallEXIT中断工作于上升和下降沿中断(INT01)EXT_MODE_FallEXIT中断工作于下降沿中断(注意:INT234只有下降沿u8EXTI_Polity;PolityHigh高优先级PolityLowu8EXTI_Interrupt EXIT中断使能 EXIT中断u8Ext_Inilize(u8EXTEXTI_InitTypeDef*INTx)EXIT外0011223344下面我们用开发板(LED1234SW1SW2小按键)来做个实验, 只LED1亮按奇数 只SW1无论什么SW2(按下时LED4亮)抬起时回到LED1亮其它灯都灭的--见cocoguojia_IAP15W4K58S4 第七章WDT篇—一丝不苟的看门狗WDT,STCV2.0库函数没有关于这部分的库函数,这章,我带着大家自己写自己的STC库函数,一边学习怎样库函数一边养狗玩狗用狗。捎带WDT_CONTRSTC15Fxxxx.H80sfrWDT_CONTR7:WDT_FLAG看门狗溢出标志位(狗咬人)溢出时为1可以软 看门狗允许位(养狗证)为1时看门狗启 看门狗位(喂狗)当设置为1时看门狗重新计 11210:看门狗定时器预分频值(狗狗饥饿度各个晶振下的时间值请看“STC15系列中文手册”211页开始在这里我只展现出晶振是12MHz时候其中最右边的栏里的时间就是看门狗溢出的时间(不是很精准),所以我们要我们定义这个函数的名称为u8Wdt_Inilize(WDT_InitTypeDeftypedef{u8WDT_EN;//看门狗是否允许 u8WDT_IDLE;看门狗在IDLE模式位是否计数IDLE_Count,IDLE_Stopu8WDT_WDT_CLOCK_2TWDT_CLOCK_4TWDT_CLOCK_6TWDT_CLOCK_8TWDT_CLOCK_16TWDT_CLOCK_32TWDT_CLOCK_64TWDT}IDLE_StopWDT_CLOCK_2TWDT_CLOCK_4TWDT_CLOCK_6TWDT_CLOCK_8TWDT_CLOCK_16TWDT_CLOCK_32TWDT_CLOCK_64TWDT都需要用#define咱们可以先写:u8 Wdt_Inilize(WDT_InitTypeDef*WDTx)函数,等写到那步的在此插一个图,用STC工具时也可以打开WDT,这种打开看门狗的好mcu就受到干扰,而程序跑飞,这是还没来得急启动看门狗,造成的系统错误。下面我们用开发板(LED12SW1SW2来做个实验LED2LED13LED1SW1时按下时LED2,不喂狗SW2时按下时LED2观察LED1是否闪烁就知道是否复位了--见cocoguojia_IAP15W4K58S4之有C-基础篇实验第八章I2C篇—飞饼之挂们可以模拟I2C协议,而且模拟i2c也很容易再说一下,24CXXxx=02(2页04(2页)/08(2页)/16(2页)/32(2页64(2页)但这24c02不常见,我们留意一下,如果碰到,好查问题),24C32/6432个字节(32*8=256bit)24c16特别,256bit字节为一页(即32个字节为一页),但eeprom写入缓冲寄存器依然和02040816字节的关于器件地址的说明请见程序文件夹里的:24系列地址问题详解.doc(文件夹里还有2个pdf资料可供参考)24c16.c24c16.h24C16的库函数(24系列地址问题详解.doc,那么也很容易将本函数库改成符合其它的24cxx设备的)voidEprom_WriteByte(u16addr,u8dat);//写u8*buf指向的len!!voidEprom_WriteBlock(u16addr,u8*buf,u8len);voidEprom_ReadByte(u16addr,u8voidEprom_ReadBlock(u16addr,u8*buf,u8LED1eeprom016个地址的数据的值,保存在ReadTable[]里eeprom里的地址从01516个地址里写数据initN的值,然后在复位看看串口输出,是否和上次自己设--见cocoguojia_IAP15W4K58S4之有C-基础篇实验第九章其它篇—捎带啰嗦提提讲讲KEIL中安装STC驱动—爽歪库函数里有delay.c delay_ms(unsignedcharms) unsignedcharms是多少就延时多少,注意它的取值范围为1~255ms软件可编程复位-洗白快捷方式SWBSSWRST=1可以使系统软件复位,注意该复位是整个系统复位,所有寄存器和IO口都会复位到初始值从ISP程序区运行的意思是先看看有没有新程序要,再执行用户序 后不了程序。程序是可以随时的,因为STC烧写程序时冷启动这个步下面我们用开发板(LED12SW1)来做个实验按下SW1 按下并抬起后开始软件复观察LED1是否闪烁就知道是否复位了--见cocoguojia_IAP15W4K58S4之有C-基础篇实验8_RES上电复位后-出生以后IO口都默认准双向口/P0IO驱动能力可达到20mA但管脚大于等于40pin的总电流过120mA管脚大于等于16pin小于等于32pin的总电流不要大于90mA xx=0816243240485660flash081624324048这个系列的RAM都是2K其中关于变量前缀有几点要说明data0x00-0x7f128RAM,acc直接读写的,速度最快,生idATa:固定指前0x00-0xff256个RAM,其中128和dATa128完全相同,句为:moxACC,@Rx.(不重要的补充:c中idATa做指针式的效果很好)MEMORYMODELSMALL,如果编译OK,这种方式数据处理效率最高。一般简单的小程序我会选择MEMORYMODEL选smallsmallRAM里,不够了才会存到外部LargeRAM里,无论选择哪种模式,都是可以存在内TargetMEMORYMODELsmall,unsignedchara;变量在内部ram.unsignedchardataa;变量在内部unsignedcharidataa;变量00~ff256ramMEMORYMODELLarge的模式unsignedchara;变量 在外部ram.unsignedchardataa;变 unsignedcharidataa;变 在00~ff256个字节的ram这就是区别,就是说这几个选项只是影响没有特别指定变量的空间的时候,默认在哪里,比如上面的变量定义unsignedchara右边还有示片外RAM是多15W4KxxS4系列RAM都是4K,所以UseOn-ChipXRAM之前的对勾选中15W4KxxS4ROMUseOn-ChipXROM之前的对勾不选中,我们可以在编译完后,看keil下面的提示框来判断是否ROM超出了我们的的ROM,如图RAMUseOn-ChipXRAM,所以超出了,RAM=255+1RAM=XRAM,15W4KxxS4RAM=RAM+RAM=255+1+XRAM=0XFF+(0开始的所以要加1)+0XEFF+1(0开始的所以要加1)=4096(十进制)=4K(4*1024)有些经常会调用或者想要计算速度快的变量我们unsignedchardataa;unsignedintdatak;就好 文件的路径设置—快捷方STC的—槽点虽然好多人都说STC太山寨,但我觉得外观不重要,实用就行,STC当然有进阶篇注意进阶篇的C例程文件里不一定都包括所有的库函数,有些用不到的库函数,“cocoguojia15W4KxxS4库函数Vx_xx版”文件夹里,有所有的全的库第十章OLED—小巧别致高像素OLED显示屏不同于LCD,OLED上电是没有反应的,需要程序驱 0.96这个OLED库不是我从头写的,是我从网上的资料中经过修改后的,用的是模拟SPI方式控制OLEDOLED库一些函数我也没看是怎么写的,也不是每个函数的原理我都voidOLED_CLS(void);//清voidOLED_ShowStr(u8x,u8y,u8ch[],u8TextSize);//ASCII字符,6*8(TextSize=1)和8*16(TextSize=2)可选 (u8x,u8yu8N);//显示汉字,16*16点在oled.c中#defineOLED_USER_EA//如果定义OLED_USER_EA运行时就中断,运行完毕后再打////#defineOLED_USER_EAoled.hOLED上电后先显示3s的(貌似mp3的),“cocoguojia”;LED1234LED亮的状态来显示LEDx=0(x=1234)第十一章频率蜂鸣器—会唱歌的小黄鹂这章我们来学习15W4KxxS4独有的高精度的6路独立 没有这的库函数都是cocoguojia自己写的,STC库还暂时还没有,水试着自己编写函数库,会更加了解stc的寄存器功能的,cocoguojia通过写 各个性能,之前虽然也看stc的PDF了,但真是 先看我写的ch void_Inilize(u8 其中_N对应着2到 u8//DISABLE=不使能相反的意思以下的后是下文就不说u8//_HIGHT=初始高电 _LOW=初始低电u8//DISABLE=关闭计数器归零中断但CBIF仍然会被硬件置u8 波形输出// u8u8//ENABLE=发生异常时 对应的输出口会变成高阻输入模 //ENABLE=使能异常检测中u8u8 FLT当P24=1触 u8 的时钟源是系统时钟经分频后的时// u8的时钟源是系统时钟/(PS[3:0]+1)u8//u8u8//ENABLE=使能第一翻转中u8 //ENABLE=使能第二翻转中u8 u8_SET_PERIOD(u16period为15位设置的时候过15 u8 2 其中period1为第一次翻转的值此值将一直和 相等时输出翻转其中period2为第二次翻转的值此值将一直和 相等时输出翻转下面我们用开发板(蜂鸣器大旋钮)来做个实验 注意晶振要 实验1、让频率蜂鸣器发出音节高音 在静音ms然2AD值的大小来演奏检测频率大约10ms一次ADC,注意要是大旋钮调到最小--奏乐程序里是8位AD值大于1才奏乐------见cocoguojia_IAP15W4K58S4之有C-进阶篇蜂鸣器之奏乐简单爱实验24MHz版第十二章红外学习—这个函数负责复杂的PCA初始化 PCA0 PCA1 PCA2 PCAPCA_Counter我要说明一下,PCA3条通道都是用这个计数器为在PCA_Mode_模式时 体虽然都是结构体,但让到了语文里的一个写作手法—花开两朵各表一枝CA_Counter214的主角,所以大家都曾买过收到PCA_Clock_1TPCA PCA_Clock_2TPCA 使用系统时钟2分频PCA_Clock_4TPCA 使用系统时钟4分频PCA_Clock_6TPCA 使用系统时钟6分频PCA_Clock_8TPCA 使用系统时钟8分频 使用系统时钟12分 PCA0 PCAECI IO IO口切换选 IOPCA_Interrupt_ModePCA溢出中断是否使PCA_PolityPCA_RUNPCA计数器阵列是否启注意以上这些参数是属于PCA_Clock,如果形式参数你添的是PCAx它来给每一路PCA进行个性设置 式 模式宽度(有876位可选) PCA_Interrupt_ModePCA中断方式选择下降沿中断中断使能如果后面使用了|DISABLE模式 没有用NC 高速脉冲输出模式决定什么时候IO口翻转 (u8PCA_id, 还有一点要注意voidn_Update(u8PCA_id,u16high)里面在写PCA_Value的值之前是先PCA计数器阵列运行的,然后把值写入之后,就会使能PCA计数器阵列运行接下来就是 PCA_Handler(void)interruptPCAPCA下面我们用开发板(LED1234红外接收头(HX1838)红外LED)来做个R18R2820cocoguojia2100欧姆的,红外发射LED发射能力很弱,距离稍长点,就不了,后来经实验放了2个20欧姆(2个可以流更大的电流,以免烧坏电阻,0805封装的电阻功率小P44P26此实验我是用小米盒子实验红外学习成功但用LG彩电红外学习不成功在LED都灭了之后就可以用红外对着红外接收头试着按一当接收头接收到红外的时候LED1会亮(仔细看会闪几下的LED2(实际是咱们按键时间LED41把接收的时间值(2注意这个值除以2就是时间us为单位

温馨提示

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

最新文档

评论

0/150

提交评论