📄 main__.c
字号:
#include <mega128.h>
#include "delay.h"
#include "ucos_ii.h"
#include "app.h"
#define uchar unsigned char
uchar flash dispcode[16]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7b,0x71};
#define OS_TASK_1_STK_SIZE OS_TASK_STK_SIZE
#define OS_TASK_1_HARD_STK_SIZE OS_TASK_HARD_STK_SIZE
#define OS_TASK_2_STK_SIZE OS_TASK_STK_SIZE
#define OS_TASK_2_HARD_STK_SIZE OS_TASK_HARD_STK_SIZE
/****************函数声明*****************/
void AppIOInit(void);
//任务一
OS_STK Task1_Stack[OS_TASK_1_STK_SIZE];
void Task1_Task(void *p_arg);
#define Task1_PRIO 2
//任务二
OS_STK Task2_Stack[OS_TASK_2_STK_SIZE];
void Task2_Task(void *p_arg);
#define Task2_PRIO 3
/*************主函数***************/
void main(void)
{
delay_ms(1000);
AppIOInit(); //初始化MCU的硬件
OSInit(); //初始化uC/OS-II
OSTaskStkSize = OS_TASK_1_STK_SIZE;
OSTaskHardStkSize = OS_TASK_1_HARD_STK_SIZE;
OSTaskCreate(Task1_Task, (void *)0, (OS_STK *)&Task1_Stack[OSTaskStkSize-1], Task1_PRIO);
OSTaskCreate(Task2_Task, (void *)0, (OS_STK *)&Task2_Stack[OSTaskStkSize-1], Task2_PRIO);
OSStart(); //开始运行uC/OS-II
}
/**********************子程序***********************/
/*------------------子任务函数定义-------------------*/
void Task1_Task(void *p_arg)
{
OS_CPU_SR cpu_sr;
p_arg = p_arg;
while(1)
{
LCD_disp();
}
}
void Task2_Task(void *p_arg)
{
uchar i;
OS_CPU_SR cpu_sr;
p_arg = p_arg;
while(1)
{
for(i=0;i<16;i++)
{
SPDR=dispcode[i];
while(!SPSR.7); //一个字节发送完中断标志
SPSR.7=0;
delay_ms(600);
}
OSTimeDly(1); //调用系统时钟延时以让出CPU好让下一个任务得到执行
}
}
/*****************IO寄存器初始化****************/
void AppIOInit (void)
{
MCUCR=0;
DDRA=0xff;
PORTA=0xff;
DDRC=0x08;
PORTC=0xff;
DDRE=0x80;
PORTE=0xff;
DDRB=0xff; //初始化时要使能方向寄存器为1
SPCR=0x7d; //数据移出串口的顺序是LSB即低位在先
SPSR=0x01;
}
#include <mega128.h>
#include "delay.h"
#include "app.h"
#include "ucos_ii.h"
#define uchar unsigned char
/* 定义OCMJ4X8端口 */
#define data_port PORTA
#define ASK PINE.6
#define ANSWER PORTE.7
#define RESET PORTC.3
/************函数声明**************/
void ocmj_init(void);
void ocmj_write(uchar data);
void bmp_tran(uchar x,uchar y,uchar high,uchar width,flash uchar *bmp_p);
void hz_tran(uchar x,uchar y,uchar flash *hz_p);
void asc_tran(uchar x,uchar y,uchar flash *asc_p);
/***************主函数*************/
void LCD_disp(void)
{
ocmj_init();//初始化
ocmj_write(0xf4); //清屏
hz_tran(0,0,"第一路信号"); //传送内部汉字,以16*16为一个汉字单元
asc_tran(10,6,":");
hz_tran(0,1,"第二路信号");
asc_tran(10,22,":");
hz_tran(0,2,"第三路信号");
asc_tran(10,38,":");
hz_tran(0,3,"第四路信号");
asc_tran(10,54,":");
while(1)
{
OSTimeDly(10); //延时以让出CPU
}
}
/*****************************************/
/* OCMJ4X8LCD初始化 */
void ocmj_init(void)
{
RESET=0; //LCD复位
delay_ms(10);
RESET=1;
ANSWER=0;
delay_ms(10);
}
/* 写数据到LCD */
void ocmj_write(uchar data)
{
while(ASK!=0);
data_port=data;
delay_ms(2);
ANSWER=1;
delay_ms(2);
while(ASK==0);
ANSWER=0;
}
/* 传送bmp点阵数据到LCD */
/* x:0~15(字节为单位) y:0~64 */
/* bmp_p:指向图形数据的指针 */
/* high:位图高度(点阵行为单位) */
/* width:位图宽度(以字节为单位)? */
void bmp_tran(uchar x,uchar y,uchar high,uchar width,flash uchar *bmp_p)
{
uchar i,j;
x+=4;
for(j=0;j<high;j++)
{
for(i=0;i<width;i++)
{
ocmj_write(0xf3);
ocmj_write(x);
ocmj_write(y);
ocmj_write(*bmp_p);
bmp_p++;
x++;
}
x-=width;
y++;
}
}
/* 传送LCD内部汉字数据到LCD */
/* x:0x00~0x07 y:0x00~0x03 */
void hz_tran(uchar x,uchar y,uchar flash *hz_p)
{
x+=2;
while((*hz_p)!=0)
{
ocmj_write(0xf0);
ocmj_write(x);
ocmj_write(y);
ocmj_write(*hz_p-0xa0);
hz_p++;
ocmj_write(*hz_p-0xa0);
hz_p++;
if(x<0x09)
x++;
else
{
x=0x02;
y++;
}
}
}
/* 传送ASCII字母到LCD */
/* x:0x00~0x0f y:0~64 */
void asc_tran(uchar x,uchar y,uchar flash *asc_p)
{
x+=4;
while((*asc_p)!=0)
{
ocmj_write(0xf1);
ocmj_write(x);
ocmj_write(y);
ocmj_write(*asc_p);
asc_p++;
if (x<0x13)
x++;
else
{
x=0x04;
y+=8;
}
}
}
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
* CORE FUNCTIONS
*
* (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
* All Rights Reserved
*
* File : OS_CORE.C
* By : Jean J. Labrosse
* Version : V2.76
*********************************************************************************************************
*/
#ifndef OS_MASTER_FILE
#define OS_GLOBALS
#include "ucos_ii.h"
#endif
/*
*********************************************************************************************************
* MAPPING TABLE TO MAP BIT POSITION TO BIT MASK
*
* Note: Index into table is desired bit position, 0..7
* Indexed value corresponds to bit mask
*********************************************************************************************************
*/
INT8U const OSMapTbl[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
/*
*********************************************************************************************************
* PRIORITY RESOLUTION TABLE
*
* Note: Index into table is bit pattern to resolve highest priority
* Indexed value corresponds to highest priority bit position (i.e. 0..7)
*********************************************************************************************************
*/
INT8U const OSUnMapTbl[256] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x10 to 0x1F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x20 to 0x2F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x30 to 0x3F */
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x40 to 0x4F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x50 to 0x5F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x60 to 0x6F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x70 to 0x7F */
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x80 to 0x8F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x90 to 0x9F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xA0 to 0xAF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xB0 to 0xBF */
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xC0 to 0xCF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xD0 to 0xDF */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xE0 to 0xEF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 /* 0xF0 to 0xFF */
};
/*$PAGE*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
static void OS_InitEventList(void);
static void OS_InitMisc(void);
static void OS_InitRdyList(void);
static void OS_InitTaskIdle(void);
#if OS_TASK_STAT_EN > 0
static void OS_InitTaskStat(void);
#endif
static void OS_InitTCBList(void);
/*$PAGE*/
/*
*********************************************************************************************************
* GET THE NAME OF A SEMAPHORE, MUTEX, MAILBOX or QUEUE
*
* Description: This function is used to obtain the name assigned to a semaphore, mutex, mailbox or queue.
*
* Arguments : pevent is a pointer to the event group. 'pevent' can point either to a semaphore,
* a mutex, a mailbox or a queue. Where this function is concerned, the actual
* type is irrelevant.
*
* pname is a pointer to an ASCII string that will receive the name of the semaphore,
* mutex, mailbox or queue. The string must be able to hold at least
* OS_EVENT_NAME_SIZE characters.
*
* err is a pointer to an error code that can contain one of the following values:
*
* OS_NO_ERR if the name was copied to 'pname'
* OS_ERR_EVENT_TYPE if 'pevent' is not pointing to the proper event
* control block type.
* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
* OS_ERR_PEVENT_NULL if you passed a NULL pointer for 'pevent'
*
* Returns : The length of the string or 0 if the 'pevent' is a NULL pointer.
*********************************************************************************************************
*/
#if OS_EVENT_EN && (OS_EVENT_NAME_SIZE > 1)
INT8U OSEventNameGet (OS_EVENT *pevent, char *pname, INT8U *err)
{
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
cpu_sr = 0; /* Prevent compiler warning */
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -