📄 main.c
字号:
/*广州穗佳电子科技有限公司
冷火MCF52255多功能开发板
更多精彩产品,关注穗佳电子淘宝店
http://sogadz.taobao.com*/
#include "support_common.h" /* include peripheral declarations and more */
#if (CONSOLE_IO_SUPPORT || ENABLE_UART_SUPPORT)
/* Standard IO is only possible if Console or UART support is enabled. */
#include <stdio.h>
#endif
#include "OLED12864.h"
#include "ADC.h"
#include "PIT.h"
#include "PWM.h"
#include "TFT.h"
#include "NRF24L01.h"
#include "UART.h"
#define uchar unsigned char
#define uint unsigned int
/*********************************************/ //延时 /*********************************************/
void delay(int xms) //xms毫秒延时
{
int ii,jj;
for(ii=0;ii<xms;ii++)
for(jj=0;jj<2000;jj++);
}
void delay_us(int xus) //xus微秒延时
{
int ii,jj;
for(ii=0;ii<xus;ii++)
for(jj=0;jj<2;jj++);
}
/*********************************************/ //流水灯,数码管 蜂鸣器 /*********************************************/
#define Du MCF_GPIO_PORTUC_PORTUC0 //段选锁存器控制端
#define We MCF_GPIO_PORTUC_PORTUC1 //位选锁存器控制端
#define Du_1 MCF_GPIO_PORTUC|=Du //段选锁存器控制端置1
#define We_1 MCF_GPIO_PORTUC|=We //位选锁存器控制端置1
#define Du_0 MCF_GPIO_PORTUC&=~Du //段选锁存器控制端置0
#define We_0 MCF_GPIO_PORTUC&=~We //位选锁存器控制端置0
#define Beeper MCF_GPIO_PORTUC_PORTUC3
#define Beeper_1 MCF_GPIO_PORTUC|=Beeper
#define Beeper_0 MCF_GPIO_PORTUC&=~Beeper
#define LED_EN MCF_GPIO_PORTTJ_PORTTJ7 //LED 使能EN信号
#define LED_EN_0 MCF_GPIO_PORTTJ=0x0f
#define LED_EN_1 MCF_GPIO_PORTTJ=0x8f
void IO_init()
{
MCF_GPIO_PTJPAR = 0x00; // 配置PTJ为普通IO
MCF_GPIO_DDRTJ = 0xff; // 设置PTJ为输出
MCF_GPIO_PORTTJ = 0x00; //关闭PTJ口
MCF_GPIO_PUCPAR = 0x00; // 配置PUC为普通IO
MCF_GPIO_DDRUC = 0xff; // 设置PUC为输出
MCF_GPIO_PORTUC = 0x08; //关闭PUC口
}
void led(uchar n) //n;显示内容
{
char i;
MCF_GPIO_PORTTJ=0; //流水灯控制端
Du_1; //段选锁存器
Du_0;
LED_EN_0; //流水灯公共端
We_1; //位选锁存器
We_0;
MCF_GPIO_PORTTJ=n; //流水灯控制端
Du_1; //段选锁存器
Du_0;
}
uchar num_we[]={0x87,0x8b,0x8d,0x8e,};//数码管位控制
uchar num_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//数码管段码表
void Segment_clr()
{
MCF_GPIO_PORTTJ=0x00; //消影
Du_1; //段选锁存器
Du_0;
}
void Seg_1(uchar n,uchar m)//第n位显示数m
{
MCF_GPIO_PORTTJ=0x00; //消影
Du_1; //段选锁存器
Du_0;
MCF_GPIO_PORTTJ=num_we[n]; //位选信号
We_1; //位选锁存器
We_0;
MCF_GPIO_PORTTJ=m; //段选信号
Du_1; //段选锁存器
Du_0;
}
void Segment_4(uint m)//显示数m
{
Seg_1(0,num_du[m%10]);
Seg_1(1,num_du[m/10%10]);
Seg_1(2,num_du[m/100%10]);
Seg_1(3,num_du[m/1000%10]);
}
void beep(uint ms)
{
Beeper_0;
delay(ms);
Beeper_1;
}
/*********************************************/ //1602LCD /*********************************************/
#define LCD1602_RW MCF_GPIO_PORTTJ_PORTTJ6 //1602LCD 读写RW信号
#define LCD1602_RS MCF_GPIO_PORTTJ_PORTTJ4 //1602LCD 数据控制RS信号
#define LCD1602_EN MCF_GPIO_PORTTJ_PORTTJ5 //1602LCD 使能EN信号
#define LCD1602_RW_1 MCF_GPIO_PORTTJ|=LCD1602_RW
#define LCD1602_RS_1 MCF_GPIO_PORTTJ|=LCD1602_RS
#define LCD1602_EN_1 MCF_GPIO_PORTTJ|=LCD1602_EN
#define LCD1602_RW_0 MCF_GPIO_PORTTJ&=~LCD1602_RW
#define LCD1602_RS_0 MCF_GPIO_PORTTJ&=~LCD1602_RS
#define LCD1602_EN_0 MCF_GPIO_PORTTJ&=~LCD1602_EN
void write(uchar COD,uchar dat) //CD=1为写数据,0为写命令;dat:数据/命令
{
MCF_GPIO_PORTTJ=dat; //送数据/命令
Du_1; //段选锁存器
Du_0;
MCF_GPIO_PORTTJ=0x8f;
if(COD!=0)LCD1602_RS_1;//判断是写数据/命令
We_1; //位选锁存器
//delay(10);
LCD1602_EN_1; //LCD使能
delay(10);
MCF_GPIO_PORTTJ=0x8f;
We_0;
}
char tab1[]={"0123456789,.:;?!"};
char tab2[]={"abcdefghijklmnopq"};
void show_str(char *x) //*x:显示内容
{
uchar i=0;
for(;;)
{
write(1,x[i]);
i++;
if(x[i]=='\0')break;
}
}
void LCD1602_init() //LCD初始化
{
write(0,0x38);
write(0,0x0c);
write(0,0x06);
write(0,0x01);//清零
write(0,0x80);
//write(0,0x80+40);//换行
}
/*********************************************/ //舵机 /*********************************************/
int ang[4];
char mod;
uint time;
void engine(int num,int angle) // unm为控制端口 angle为角度位置
{
int i=0;
mod=1;
ang[num]=50+angle*10/9;
time=0;
MCF_PIT_PCSR(0)=MCF_PIT_PCSR_RLD
|MCF_PIT_PCSR_PIF
|MCF_PIT_PCSR_PIE
|MCF_PIT_PCSR_OVW
|MCF_PIT_PCSR_PRE(4); //fPIT=fsys/2/2^PER
//at 80MHz
//4- 2500000Hz -0.4us
//|MCF_PIT_PCSR_DBG;
//|MCF_PIT_PCSR_DOZE
MCF_PIT_PMR(0)=25;
MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
MCF_INTC0_IMRH&=~MCF_INTC_IMRH_INT_MASK55;//PIT0
MCF_INTC0_ICR55=MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(2);//PIT0
EnableInterrupts;
}
/*********************************************/ //按键 /*********************************************/
#define key1_IO MCF_GPIO_SETNQ_SETNQ1 //
#define key2_IO MCF_GPIO_SETNQ_SETNQ3 //
#define key3_IO MCF_GPIO_SETNQ_SETNQ5 //
#define key4_IO MCF_GPIO_SETNQ_SETNQ7 //
#define key1 MCF_GPIO_SETNQ&key1_IO //
#define key2 MCF_GPIO_SETNQ&key2_IO //
#define key3 MCF_GPIO_SETNQ&key3_IO //
#define key4 MCF_GPIO_SETNQ&key4_IO //
void key_init()
{
MCF_GPIO_PNQPAR = 0x00; // 配置PNQ为普通IO
MCF_GPIO_DDRNQ = 0x00; // 设置PNQ为输入
}
char key_scan()
{
if((key1)==0)
{
delay_us(10);
if((key1)==0)
{
delay_us(10);
while((key1)==0);
return 1;
}
}
if((key2)==0)
{
delay_us(10);
if((key2)==0)
{
delay_us(10);
while((key2)==0);
return 2;
}
}
if((key3)==0)
{
delay_us(10);
if((key3)==0)
{
delay_us(10);
while((key3)==0);
return 3;
}
}
if((key4)==0)
{
delay_us(10);
if((key4)==0)
{
delay_us(10);
while((key4)==0);
return 4;
}
}
return 0;
}
/**********************************************************************************************************
**********************************************************************************************************/
long h1,h2,h3,h;
uint con=0;
uint con_PIT;
extern uchar TxBuf[];
extern uchar RxBuf[];
void main(void)
{
int counter;
int i=0,j=0,k=0;
IO_init();
key_init();
//LCD1602_init();
//OLCD_init();
//ADC_init();
uart1_init(9600);
uart0_init(9600);
while(1)
{
//uart2_putstr("uart2 OK!\n");
//uart1_putstr("UART1 OK!\n");
uart0_putstr("UART0 OK!\n");
delay(500);
}
/*
//******************流水灯******************
j=0x80;
while(1)
{
led(j);
delay(1000);
j>>=1;
if(j==0)j=0x80;
if(key_scan()==1)break;
}
i=0;j=0;k=0;
//****************** 数码管 PIT ******************
PIT0_init();
EnableInterrupts;
while(1)
{
PIT0_start(78125);
//con=MCF_PIT_PCSR(0);
Segment_4(con_PIT);
}
//******************蜂鸣器******************
while(1)
{
beep(1000);
delay(1000);
}
//******************OLED******************
OLCD_init();
while(1)
{
LCD_Print(12,0,"广州Beyond科技");
LCD_Print(15,2,"飞思卡尔智能车");
LCD_Print(43,4,"专营店");
LCD_Print(15,6,"智能车首选液晶");
delay(1000);
LCD_CLS();
LCD_P8x16Str(48,4,"OLED");
LCD_P6x8Str(16,6,"beyond-freescale");
LCD_P6x8Str(34,7,"2012-10-01");
delay(1000);
LCD_CLS();
Draw_BMP(0,0,64,7,beyond96x64); //显示图片
delay(1000);
LCD_CLS();
Draw_BMP(64,0,128,7,beyond64x64);
delay(1000);
LCD_CLS();
}
//******************AD转换******************
ADC_init();
while(1)
{
h1=ADonce(0);
h2=ADonce(0);
h3=ADonce(0);
h=(h1+h2+h3)/3*3300/4096;
//Segment_4(h);
for(i=0;i<10000;i++)
{
Seg_1(0,num_du[h%10]);
Seg_1(1,num_du[h/10%10]);
Seg_1(2,num_du[h/100%10]);
Seg_1(3,num_du[h/1000%10]|0x80);
}
}
//****************** TFT ******************
TFT_init();
write_command(0x2C);
dsp_single_colour(0xff,0xff);//白色
delay(1000);
show_pic(picture1);
while(1);
while(0)
{
dsp_single_colour(0x00,0x00);//黑色
delay(500);
dsp_single_colour(0xf8,0x00);//红色
delay(500);
dsp_single_colour(0x07,0xe0);//绿色
delay(500);
dsp_single_colour(0x00,0x1f);//蓝色
delay(500);
}
//*
//****************** PWM ******************
PWM_init();
while(1)
{
for(counter=0;counter<100;counter++)
{
for(i=0;i<20000;i++)
{
MCF_PWM_PWMDTY(1)=counter;
Seg_1(0,num_du[counter*33%10]);
Seg_1(1,num_du[counter*33/10%10]);
Seg_1(2,num_du[counter*33/100%10]);
Seg_1(3,num_du[counter*33/1000%10]|0x80);
}
//delay(500);
}
}
//******************液晶1602******************
LCD1602_init();
show_str(tab1);
write(0,0x80+40);//换行
show_str("abcdefg");
delay(1000);
while(key_scan()!=1) ;
//****************** NRF24L01 ******************
init_NRF24L01(); //无线模块初始化
nRF24L01_TxPacket(TxBuf); // 发送TxBuf中的数据
// delay(3000);
// SetRX_Mode();
while(1);
{
if(key_scan()==1)
nRF24L01_TxPacket(TxBuf);
}
//*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -