基于STC15W4K32S4的智能小车测速程序,测速使用光电码盘,显示采用诺基亚5110液晶屏
单片机源程序如下:
- #include "nokia_5110.h"
- #include "timer.h"
- #include "Exti.h"
- #include "delay.h"
- #include "motor.h"
- #include "PWM.h"
- #include "GPIO.h"
- extern u8 speed1,speed2;
- extern u16 rev1,rev2;
- /************* 功能说明 **************
- 电机驱动测试例程
- ******************************************/
- //========================================================================
- // 函数: void PWM_config(void)
- // 描述: PWM配置函数。
- // 参数: none.
- // 返回: none.
- // 版本: VER1.0
- // 日期: 2014-8-15
- // 备注:
- //========================================================================
- void PWM_config(void)
- {
- PWMx_InitDefine PWMx_InitStructure; //结构定义
- PWMx_InitStructure.PWMx_IO_Select = PWM4_P22; //PWM输出IO选择. PWM2_P37,PWM2_P27,PWM3_P21,PWM3_P45,PWM4_P22,PWM4_P44,PWM5_P23,PWM5_P42,PWM6_P16,PWM6_P07,PWM7_P17,PWM7_P06
- PWMx_InitStructure.Start_IO_Level = 0; //设置PWM输出端口的初始电平, 0或1
- PWMx_InitStructure.PWMx_Interrupt = DISABLE; //中断允许, ENABLE或DISABLE
- PWMx_InitStructure.FirstEdge_Interrupt = DISABLE; //第一个翻转中断允许, ENABLE或DISABLE
- PWMx_InitStructure.SecondEdge_Interrupt = DISABLE; //第二个翻转中断允许, ENABLE或DISABLE
- PWMx_InitStructure.FirstEdge = 64; //第一个翻转计数, 1~32767
- PWMx_InitStructure.SecondEdge = 192; //第二个翻转计数, 1~32767
- PWMx_Configuration(PWM4_ID, &PWMx_InitStructure); //初始化PWM, PWM2_ID,PWM3_ID,PWM4_ID,PWM5_ID,PWM6_ID,PWM7_ID
- P2n_standard(1<<2); //IO初始化, 上电时为高阻
- PWMx_InitStructure.PWMx_IO_Select = PWM5_P23; //PWM输出IO选择. PWM2_P37,PWM2_P27,PWM3_P21,PWM3_P45,PWM4_P22,PWM4_P44,PWM5_P23,PWM5_P42,PWM6_P16,PWM6_P07,PWM7_P17,PWM7_P06
- PWMx_InitStructure.Start_IO_Level = 0; //设置PWM输出端口的初始电平, 0或1
- PWMx_InitStructure.PWMx_Interrupt = DISABLE; //中断允许, ENABLE或DISABLE
- PWMx_InitStructure.FirstEdge_Interrupt = DISABLE; //第一个翻转中断允许, ENABLE或DISABLE
- PWMx_InitStructure.SecondEdge_Interrupt = DISABLE; //第二个翻转中断允许, ENABLE或DISABLE
- PWMx_InitStructure.FirstEdge = 64; //第一个翻转计数, 1~32767
- PWMx_InitStructure.SecondEdge = 192; //第二个翻转计数, 1~32767
- PWMx_Configuration(PWM5_ID, &PWMx_InitStructure); //初始化PWM, PWM2_ID,PWM3_ID,PWM4_ID,PWM5_ID,PWM6_ID,PWM7_ID
- P2n_standard(1<<3); //IO初始化, 上电时为高阻
- TH2 = (u8)((65536UL - MAIN_Fosc / 500000UL) / 256); //波特率使用Timer2
- TL2 = (u8)((65536UL - MAIN_Fosc / 500000UL) % 256);
- AUXR = 0x14; //Timer2 set As Timer, Timer2 set as 1T mode;
- PWM_SourceClk_Duty(PwmClk_T2, 256); //时钟源: PwmClk_1T,PwmClk_2T, ... PwmClk_16T, PwmClk_T2, PWM周期: 1~32767
-
- PWMCR |= ENPWM; // 使能PWM波形发生器,PWM计数器开始计数
- PWMCR &= ~ECBI; //禁止PWM计数器归零中断
- // PWMCR |= ECBI; //允许PWM计数器归零中断
- // PWMFDCR = ENFD | FLTFLIO | FDIO; //PWM失效中断控制, ENFD | FLTFLIO | EFDI | FDCMP | FDIO
- }
- void EXTI_config(void)
- {
- EXTI_InitTypeDef EXTI_InitStructure; //结构定义
- EXTI_InitStructure.EXTI_Mode = EXT_MODE_Fall; //中断模式, EXT_MODE_RiseFall, EXT_MODE_Fall
- EXTI_InitStructure.EXTI_Polity = PolityLow; //中断优先级, PolityLow,PolityHigh
- EXTI_InitStructure.EXTI_Interrupt = ENABLE; //中断允许, ENABLE或DISABLE
- Ext_Inilize(EXT_INT0,&EXTI_InitStructure); //初始化INT0 EXT_INT0,EXT_INT1,EXT_INT2,EXT_INT3,EXT_INT4
- EXTI_InitStructure.EXTI_Mode = EXT_MODE_Fall; //中断模式, EXT_MODE_RiseFall, EXT_MODE_Fall
- EXTI_InitStructure.EXTI_Polity = PolityLow; //中断优先级, PolityLow,PolityHigh
- EXTI_InitStructure.EXTI_Interrupt = ENABLE; //中断允许, ENABLE或DISABLE
- Ext_Inilize(EXT_INT1,&EXTI_InitStructure); //初始化INT1 EXT_INT0,EXT_INT1,EXT_INT2,EXT_INT3,EXT_INT4
- }
- void Timer_config(void)
- {
- TIM_InitTypeDef TIM_InitStructure; //结构定义
- TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
- TIM_InitStructure.TIM_Polity = PolityHigh; //指定中断优先级, PolityHigh,PolityLow
- TIM_InitStructure.TIM_Interrupt = ENABLE; //中断是否允许, ENABLE或DISABLE
- TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_ClkOut = ENABLE; //是否输出高速脉冲, ENABLE或DISABLE
- TIM_InitStructure.TIM_Value = 0x4cd0; //初值,
- TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
- Timer_Inilize(Timer0,&TIM_InitStructure); //初始化Timer0 Timer0,Timer1,Timer2
- }
- void main(void)
- {
- u8 v1[3],v2[3];
-
- P4n_standard(0x1e);
- LCD_init(); //初始化液晶
- LCD_clear();
-
- LCD_write_english_string(6,2," Welcome To");
- delay(1);
- LCD_clear();
-
- LCD_write_chinese_string(0,2,12,6,0,2);
- delay(2);
- LCD_clear();
-
- LCD_write_chinese_string(12,2,12,3,8,2);
- LCD_write_english_string(54,3,". ");
- delay_ms(250);delay_ms(250);
- LCD_write_english_string(54,3,".. ");
- delay_ms(250);delay_ms(250);
- LCD_write_english_string(54,3,"...");
- delay_ms(250);delay_ms(250);
- LCD_clear();
-
- EXTI_config();
- Timer_config();
- EA=1;
-
- PWM_config(); //PWM初始化
- GPIO_config();
-
- LCD_write_chinese_string(15,0,12,4,14,2);
- LCD_write_chinese_string(2,2,12,2,11,1);
- LCD_write_english_string(27,3,"1: cm/s");
- LCD_write_chinese_string(2,4,12,2,11,1);
- LCD_write_english_string(27,5,"2: cm/s");
-
- while(1)
- {
-
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
基于STC15W4K32S4的智能小车测速程序,测速使用光电码盘,显示采用诺基亚5110液晶屏.rar
(162.99 KB, 下载次数: 48)
|