📄 main.c
字号:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* (c) Copyright 2008, Micrium, Inc., Weston, FL
* All Rights Reserved
*
*
* Sample code
*
* File : APP.C
* By : Hong Soong
*********************************************************************************************************
*/
#include "includes.h"
/*
*********************************************************************************************************
* DEFINES
*********************************************************************************************************
*/
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/*******************************my_task1 define*******************************/
#define RS0 P5OUT &= ~(1 <<5) //RS置低
#define RS1 P5OUT |= (1 <<5) //RS置高
#define RW0 P5OUT &= ~(1 <<6) //RW置低
#define RW1 P5OUT |= (1 <<6) //RW置高
#define EN0 P5OUT &= ~(1 <<7) //E置低
#define EN1 P5OUT |= (1 <<7) //E置高
#define DataPort P4OUT //P4口为数据口
#define Data_In P4DIR=0X00
#define Data_Out P4DIR=0xff
#define DataIn P4IN
/*****************************************************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
CCTL0 = CCIE; // 使能CCR0中断
CCR0 = 1800;
OSTimeTick();
}
//*************************************************************************
// 系统时钟初始化
//*************************************************************************
void Clock_Init()
{
uchar i;
BCSCTL1&=~XT2OFF; //打开XT振荡器
BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ
do{
IFG1&=~OFIFG; //清除震荡标志
for(i=0;i<100;i++)
_NOP(); //延时等待
}
while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待
IFG1&=~OFIFG;
}
void init_my_task2()
{
P1SEL=0X00;
P1DIR=0XFF;
P1OUT=0XFF;
P3SEL=0X00;
P3DIR=0XFF;
P3OUT=0XFF;
}
void init_my_task1()
{
P4SEL = 0x00;
P4DIR = 0xFF;
P5SEL = 0x00;
P5DIR|= BIT5 + BIT6 + BIT7;
}
/*************************************************************************
1602函数
*************************************************************************/
void write_data(uchar data) //写数据
{
RW0;
RS1;
EN1;
delay_us(30);
DataPort=data;
delay_us(30);
EN0;
}
//------------------------------------------------------//
void write_cmd(uchar cmd) //写命令
{
RW0;
RS0;
EN1;
delay_us(30);
DataPort=cmd;
delay_us(30);
EN0;
}
//-----------------------------------------------------//
void init_1602() //液晶初始化
{
write_cmd(0x38); //显示模式设置 40us
delay_us(50);
//write_cmd(0x08); //显示关闭 40us
//delay_us(50);
write_cmd(0x06); //显示光标移动设置 40us
delay_us(50);
write_cmd(0x0c); //显示开及光标设置 40us
delay_us(50);
write_cmd(0x01); //清屏 1.6ms
delay_ms(5);
// write_cmd(0x1c); //写完后就向右跳一格
//delay_ms(5);
}
//----------------------------------------------------//
void write_str(uchar x,uchar y,uchar *s_byte)//写字符串
{
if(y==0)
write_cmd(0x80|x); //写要写入的地址
else
write_cmd(0xc0|x);
while(*s_byte!='\0')
{
write_data(*s_byte);
s_byte++;
}
}
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
static OS_STK AppTask1Stk[APP_TASK1_STK_SIZE];
static OS_STK AppTask2Stk[APP_TASK2_STK_SIZE];
#if (uC_TCPIP_MODULE > 0)
NET_IP_ADDR AppNetIP;
NET_IP_ADDR AppNetMsk;
NET_IP_ADDR AppNetGateway;
#endif
void my_task1 (void *p_arg);
void my_task2 (void *p_arg);
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* main()
*
* Description : This is the standard entry point for C code. It is assumed that your code will call
* main() once you have performed all necessary CPU and C initialization.
*
* Arguments : none
*********************************************************************************************************
*/
void main (void)
{
WDTCTL=WDTPW+WDTHOLD;
Clock_Init();
delay_ms(100);
//Init_TimerA();
TACTL = TASSEL_2 + MC_1; // 子系统时钟, 增计数模式
CCTL0 = CCIE; // 使能CCR0中断
CCR0 = 100;
init_my_task1();
init_my_task2();
init_1602();
OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel" */
OSTaskCreate( my_task2,
(void *)0,
&AppTask2Stk[APP_TASK2_STK_SIZE - 1],
APP_START_TASK2_PRIO
);
OSTaskCreate( my_task1, /* Create the start task */
(void *)0,
&AppTask1Stk[APP_TASK1_STK_SIZE - 1],
APP_START_TASK1_PRIO
);
OSStart(); /* Start multitasking (i.e. give control to uC/OS-II) */
}
/******************************************************************************
任务1函数
******************************************************************************/
void my_task1 (void *p_arg)
{
(void)p_arg;
/* Initialize IO functions */
#if (OS_TASK_STAT_EN > 0)
OSStatInit(); /* Determine CPU capacity */
#endif
/* Initialize the Display layout */
uchar *p;
p="wu";
/* Create application tasks */
while (1)
{ /* Task body, always written as an infinite loop. */
write_str(1,1,p);
delay_ms(150);
write_cmd(0x01);
delay_ms(2);
OSTimeDly(6);
}
}
/******************************************************************************/
//任务2封装体
/******************************************************************************/
void my_task2(void *p_arg)
{
(void)p_arg;
uchar i;
uchar DATA[4]={0x0e,0x0d,0x0b,0x07};
while (1)
{ /* Task body, always written as an infinite loop. */
for(i=0;i<4;i++)
{
P3OUT=DATA[i];
delay_ms(100);
}
OSTimeDly(2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -