📄 ex1.c
字号:
#include <includes.h>
#include <cygnalcon.h>
#include "intrins.h"
void TaskA(void*) reentrant;
void TaskB(void*) reentrant;
void TaskC(void*) reentrant;
void TaskD(void*) reentrant;
OS_STK TaskStartStkA[MaxStkSize];//注意:在ASM文件中设置?STACK空间为40H即64。
OS_STK TaskStartStkB[MaxStkSize];
OS_STK TaskStartStkC[MaxStkSize];
OS_STK TaskStartStkD[MaxStkSize];
INT8U xdata LED[6]={0,0,0,0,0,0};
void ch451_write(unsigned int command);
void delay1ms(unsigned char x) reentrant;
void delay1us(unsigned char y) reentrant;
sbit CLK = P3^0;
sbit DIN = P3^1;
sbit LOAD = P3^2;
sbit DOUT = P3^3;
sbit KEY0 = P2^0;
sbit KEY1 = P2^1;
sbit KEY2 = P2^2;
sbit OSWTM = P3^4;//osw translate master
sbit OSWTS = P3^5;//osw translate Protect
sbit OSWRM = P3^6;//osw receive master
sbit OSWRS = P3^7;//osw receive Protect
#define SwitchToMasterT OSWTM=1;OSWTS=0;//OSW_T 打到主线路 东 东主
#define SwitchToMasterR OSWRM=1;OSWRS=0;//OSW_R 打到主线路 西 西主
#define SwitchToProtectT OSWTM=0;OSWTS=1;//OSW_T 打到备线路 东 东旁
#define SwitchToProtectR OSWRM=0;OSWRS=1;//OSW_R 打到备线路 西 西旁
/*************************************************************************
数码管函数 define
*************************************************************************/
#define CH451_RESET 0x0201 //复位
#define CH451_LEFTMOV 0x0300 //设置移动方式-作移
#define CH451_LEFTCYC 0x0301 //设置移动方式-左循
#define CH451_RIGHTMOV 0x0302 //设置移动方式-右移
#define CH451_RIGHTCYC 0x0303 //设置移动方式-右循
#define CH451_SYSOFF 0x0400 //关显示、键盘、看门狗
#define CH451_SYSON1 0x0401 //开显示
#define CH451_SYSON2 0x0403 //开显示、键盘
#define CH451_SYSON3 0x0407 //开显示、键盘、看门狗功能
#define CH451_DSP 0x0500 //设置默认显示方式
#define CH451_BCD 0x0580 //设置BCD译码方式
#define CH451_TWINKLE 0x0600 //设置闪烁控制
#define CH451_DIG0 0x0800 //数码管位0显示
#define CH451_DIG1 0x0900 //数码管位1显示
#define CH451_DIG2 0x0a00 //数码管位2显示
#define CH451_DIG3 0x0b00 //数码管位3显示
#define CH451_DIG4 0x0c00 //数码管位4显示
#define CH451_DIG5 0x0d00 //数码管位5显示
#define CH451_DIG6 0x0e00 //数码管位6显示
#define CH451_DIG7 0x0f00 //数码管位7显示
void main(void)
{
config();
OSInit();
ch451_write(CH451_RESET); //复位
ch451_write(CH451_SYSON1); //开显示
ch451_write(CH451_DSP); //设置默认显示方式
ch451_write(CH451_BCD); //设置BCD译码方式
OSTaskCreate(TaskA, (void *)0, TaskStartStkA,2);
OSTaskCreate(TaskB, (void *)0, TaskStartStkB,3);
OSTaskCreate(TaskC, (void *)0, TaskStartStkC,4);
OSTaskCreate(TaskD, (void *)0, TaskStartStkD,5);
InitTimer0();
OSStart();
}
void TaskA(void *pdat) reentrant
{
pdat=pdat;
for(;;){
INT8U sz=0;
INT8U d[10]={63,6,91,79,102,109,124,7,127,103};
//for( sz=0;sz<10;sz++)
// {
// P3=d[sz];
LED[0]=LED[0]+1;
if(LED[0]>=10)LED[0]=0;
ch451_write(CH451_DIG0+LED[0]);
// ch451_write(CH451_DIG1+LED[1]);
// ch451_write(CH451_DIG2+LED[2]);
if(OSWTM==0)
{
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
SwitchToMasterT
SwitchToMasterR
}
OSTimeDly(2*OS_TICKS_PER_SEC);
// }
}
}
void TaskB(void *pdat) reentrant
{
pdat=pdat;
for(;;){
//P1=~P1;
LED[1]=LED[1]+1;
if(LED[1]>=10)LED[1]=0;
// ch451_write(CH451_DIG0+LED[0]);
ch451_write(CH451_DIG1+LED[1]);
// ch451_write(CH451_DIG2+LED[2]);
if(OSWTM==1)
{
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
SwitchToProtectT
SwitchToProtectR
}
OSTimeDly(2*OS_TICKS_PER_SEC);
}
}
void TaskC(void *pdat) reentrant
{
pdat=pdat;
for(;;){
LED[2]=LED[2]+1;
if(LED[2]>=10)LED[2]=0;
ch451_write(CH451_DIG2+LED[2]);
OSTimeDly(2*OS_TICKS_PER_SEC);
}
}
void TaskD(void *pdat) reentrant
{
INT8U sx;
INT8U e[10]={103,127,7,124,109,102,79,91,6,63};
pdat=pdat;
for(;;){
for( sx=0;sx<10;sx++)
{
P2=e[sx];
OSTimeDly(3*OS_TICKS_PER_SEC);
}
}
}
void ch451_write(unsigned int command)
{
unsigned char i;
LOAD=0; //命令开始
delay1us(10);
for(i=0;i<12;i++ )
{ //送入12位数据,低位在前
DIN=command&0x01;
CLK=0;
command>>=1;
CLK=1; //上升沿有效
delay1us(2);
}
LOAD=1; //加载数据
}
void delay1ms(unsigned char x) reentrant
{
unsigned char xdata delayk;
unsigned int xdata delayi;
for(delayk=0;delayk<x;delayk++)
for(delayi=0;delayi<335;delayi++)//1ms
{
delayi++;
delayi--;
}
}
void delay1us(unsigned char y) reentrant
{
unsigned int xdata delayj;
for(delayj=0;delayj<y;delayj++){
// delayj++;delayj--;
_nop_();
_nop_();
_nop_();
_nop_();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -