📄 main.c
字号:
/**************************************************/
/****该程序来自于智能车制作WWW.INTELLIGENTCAR.CN***/
/****************程序问题请与作者联系**************/
/**********BY DEMON EMALI:WANGPANBAO@126.COM*******/
/**************************************************/
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
unsigned char led[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F, 0x77,0x7C,0x39,0x5E,0x79,0x71}; //LED显示字库
#define vel PWMDTY23 //定义vel为PWM输出(PWM3端口)
int num=0/*LED显示用*/,speed=0/*测量速度*/,setspeed=0/*设定速度*/,speedresetflag=0/*给定归零标志*/,lastspeed=0/*上次速度*/;
/*-------串口初始化----------------------*/
void SciInit(){
SCI0BDL = (unsigned char)((16000000UL /* OSC freq */ / 2) / 9600 /* baud rate */ / 16 /*factor*/); //波特率设定
SCI0CR1=0; /*normal,no parity*/
SCI0CR2=0X2C; /*RIE=1,TE=1,RE=1*/
}
/*-------发射端程序----------------------*/
void SciTx(unsigned char text){
while (!(SCI0SR1&0x80)); /* wait for output buffer empty */
SCI0DRH=0;
SCI0DRL=text;
}
int n;
void main()
{
int i,j,a,b,c,d,e=0,f=0,g=0,h=0;
PORTB=0x00;
DDRB=0xFF;
PORTA=0xFF;
DDRA_BIT0=1;
DDRA_BIT1=1;
DDRA_BIT2=1;
DDRA_BIT3=1;
DDRA_BIT4=0;
DDRA_BIT5=0;
DDRA_BIT6=0;
DDRA_BIT7=1;
PUCR_PUPAE=1; //以上为PORTA,PORTB初始化
SciInit();
PWME=0xaa;//通道01,23,45,67使能
PWMPOL=0xaa;//通道01,23,45,67输出波形开始极性为1
PWMCTL=0xf0;//通道01,23,45,67级联
PWMCLK=0x02;//通道01选择SA为时钟源
PWMSCLA=0X05;//通道01时钟SA为3MHz(24/(2*4))
PWMPER01=60000;//设定通道01输出频率(50Hz)
PWMPER23=24000;//设定通道23输出频率(1KHz)
PWMPER45=24000;//设定通道45输出频率(1KHz)
PWMPER67=24000;//设定通道67输出频率(1KHz)
PWMDTY01=4500;
PWMDTY23=0;
PWMDTY45=0; //以上为PWM初始化(通道01为舵机控制保留,可直接使用)
TSCR2=0x07;//频率设定
TSCR1=0x90;//Timer enable and TFLG1 can be cleared auto
TIE=0x01;// Timer0 Interrupt enable
PACTL=0x50;//脉冲累加器初始化
TCTL4=0x01;
ICPAR_PA1EN=1;
TIOS_IOS0=1; //以上为定时器模块初始化
while(1)
{ EnableInterrupts;
a=setspeed/10;
for(i=0;i<200;i++) {PORTA=(PORTA&0xf0)+0x08;PORTB=led[a]; }
b=setspeed-a*10;
for(i=0;i<200;i++) {PORTA=(PORTA&0xf0)+0x04;PORTB=led[b]; } //设定速度值在LED上显示
c=num/10;
for(i=0;i<200;i++) {PORTA=(PORTA&0xf0)+0x02;PORTB=led[c]; }
d=num-c*10;
for(i=0;i<200;i++) {PORTA=(PORTA&0xf0)+0x01;PORTB=led[d]; } //测量速度值在LED上显示
j++;
if(j>10) {j=0;SciTx(' ');SciTx(c+48);SciTx(d+48);SciTx(' ');num=speed;} //定时向串口发送速度值
if(PORTA_BIT4==0) e++;
if(e>40) {e=0;setspeed--;}
if(PORTA_BIT5==0) f++;
if(f>40) {f=0;setspeed++;}
if(setspeed>=90) setspeed=90;
if(PORTA_BIT6==0) g++;
if(g>40) {g=0;h++;if(h==1) setspeed=30; if(h==2) setspeed=60; if(h==3) setspeed=90; if(h==4) setspeed=0; if(h==5) h=0;}
if(setspeed<=0) setspeed=0;
if(setspeed==0) PORTA_BIT7=0;
else PORTA_BIT7=1;
//以上为键盘控制, PORTA_BIT4控制设定速度递减,PORTA_BIT5控制设定速度递增
//PORTA_BIT6控制设定速度30为单位增加
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -