完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
7 个讨论
|
|
我以前写的代码,亲可以参考一下。
/******************************************* 开发坏境:CCSv5 程序功能:利用定时器的计时捕获模式制作简易频率计 程序说明:可测方波频率,其它波形应先整形成方波再测频率。最高和最低可测频率 为1HZ-100KHZ(很久前测的,现在记不太清了,差不多就是这个范围, 具体以实际测量为准) ********************************************/ #include #include #include #include "inc/tm4c123gh6pm.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/pin_map.h" #include "driverlib/sysctl.h" #include "driverlib/interrupt.h" #include "driverlib/gpio.h" #include "driverlib/timer.h" #include "driverlib/fpu.h" #include "driverlib/sysctl.h" #include "grlib/grlib.h" #include "driverlib/adc.h" #include "inc/hw_gpio.h" #define uchar unsigned char #define uint unsigned int //16位捕获引脚PB6,32位捕获引脚PC4 void delay_Nms(uint n); void Ini_Lcd(void); void write_com(uchar com); void write_dat(uchar dat); uchar const disps[]=["波的频率为:"]; int main(void) [ SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); //5分频,使用PLL,外部晶振16M,system时钟源选择 main osc。系统时钟40MHZ SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER0); //使能TIMER0 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); //使能GPIOF和GPIOC外设 GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3); GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4); GPIOPinConfigure(GPIO_PC4_WT0CCP0); //#define GPIO_PC4_WT0CCP0 0x00021007 GPIOPinTypeTimer(GPIO_PORTC_BASE, GPIO_PIN_4); TimerConfigure(WTIMER0_BASE,TIMER_CFG_A_CAP_TIME_UP|TIMER_CFG_SPLIT_PAIR);//计时捕获模式,上升沿捕获 TimerControlEvent(WTIMER0_BASE,TIMER_A,TIMER_EVENT_POS_EDGE); IntEnable(INT_WTIMER0A); //使能TIMER0A TimerIntEnable(WTIMER0_BASE, TIMER_CAPA_EVENT); //定时器A捕获事件触发中断 IntMasterEnable(); //master interrupt enable API for all interrupts TimerEnable(WTIMER0_BASE, TIMER_A); //TIMER0A开始计数,当计数值等于TimerLoadSet,触发中断 while(1) [ ] ] void WTimer0IntHandler(void) [ uchar c[10],d[3],flag=0; long int t[12],j; double f,time=0; int i=0; TimerIntClear(WTIMER0_BASE, TIMER_CAPA_EVENT); t=TimerValueGet64(WTIMER0_BASE); i++; time=labs(t[1]-t[0]); if(i==2) [i=0;] flag++; if(flag==3)//显示 [ f=40000000.0/time; int a,aa,bb,m=0,k=0; double b; a= (int)f;//a= 1234 b= f - a;//b= 0.5678 for(j=a;j>0;j=j/10) [ c[k++]=j%10; ] bb=(int)(b*1000); for(j=bb;m<3;j=j/10) [ d[m++]=j%10; ] Ini_Lcd(); for(aa=0;aa<12;aa++) [ write_dat(disps[aa]); ] write_com(0x90); for(j=k-1;j>=0;j--) [ write_dat(c[j]+48);] write_dat('.'); for(j=2;j>=0;j--) [ write_dat(d[j]+48);] write_dat('H'); write_dat('Z'); ] ] /******************************************* 函数名称:delay_Nms 功 能:延时N个ms的时间 参 数:无 返回值 :无 ********************************************/ void delay_Nms(uint n) [ uint i = 0; for(i = n;i > 0;i--) SysCtlDelay(SysCtlClockGet() / 3000); ] /******************************************* 函数名称:Ini_Lcd 功 能:初始化液晶模块 参 数:无 返回值 :无 ********************************************/ void Ini_Lcd(void) [ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);//使能GPIOA GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);//PA2,3,4设为输出 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能GPIOB GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3| GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);//PB设为输出 delay_Nms(15); //延时等待液晶完成复位 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4); //E=0 delay_Nms(5); write_com(0x30); /*功能设置:一次送8位数据,基本指令集*/ delay_Nms(1); write_com(0x08); /*DDRAM地址归位*/ delay_Nms(1); write_com(0x0c); /*显示设定:开显示,不显示光标,不做当前显示位反白闪动*/ delay_Nms(1); write_com(0x01); /*清屏,将DDRAM的位址计数器调整为“00H”*/ delay_Nms(1); write_com(0x06); /*功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1*/ delay_Nms(5); write_com(0x80); ] /************************************************** *名称:void write_com(uchar com) *功能:向1602写指令 *入口参数:com *出口参数:无 **************************************************/ void write_com(uchar com) [ GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_3, 0x00000);//RS=0,RW=0 GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3| GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, com); //PB=com delay_Nms(5); GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, GPIO_PIN_4); //E=1 delay_Nms(5); GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 0x00000); //E=0 ] /************************************************** *名称:void write_dat(uchar dat) *功能:向1602写数据 *入口参数:dat *出口参数:无 **************************************************/ void write_dat(uchar dat) [ GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_2 );//RS=1,RW=0 GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3| GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, dat); //PB=dat delay_Nms(5); GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4,GPIO_PIN_4); //E=1 delay_Nms(5); GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, ~GPIO_PIN_4); //E=0 ] |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
334 浏览 1 评论
528 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
773 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
649 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1126 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
55浏览 29评论
119浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
250浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
199浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
54浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:28 , Processed in 1.307135 second(s), Total 75, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号