?? main.c
字號:
/*-----------------------------------------------------*
*工 程 名:H08SCI_1 *
*硬件連接:無 *
*程序描述:把收到的數據發送回去 *
*目 的:初步掌握利用查詢方式進行串行通信的基本知識 *
*-------《嵌入式應用技術基礎教程》教學實例------------*/
//頭文件
#include "SCI.h" //串行通信子程序頭文件
#include "light.h" //燈的初始化頭文件
//函數聲明
extern void SCIInit(void); //串行口初始化子程序
//內存變量聲明
unsigned char SerialBuff[]; //存放接收數據的數組
void Delay1000(void);
//主程序
void main()
{ int lk,i,p;
unsigned char k,mo;
light_ctrla=0xff;
light_ctrlb=0x00;
SCIInit(); //調串行口初始化子程序
while(1)
{
i=SCIReN(1,SerialBuff); //等待接收1個數據
if(i==0)
{
//8個LED中只有一個燈亮,亮燈順序是從左到右,再從右到左,一個周期時間長度約4秒。
if(SerialBuff[0]=='1')
{ SCISendN(10,"LED效果1");
light_a=0xff;
for(lk=0;lk<512;lk++)
Delay1000();
for(i=0;i<8;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=(0xff)^(1<<i);
for(lk=0;lk<512;lk++)
Delay1000();
}
}
light_a=0xff;
for(lk=0;lk<512;lk++)
Delay1000();
for(i=0;i<8;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=(0xff)^(0x80>>i);
for(lk=0;lk<512;lk++)
Delay1000();
}
}
light_a=0xff;
}
//8個LED中只有2個燈亮,亮燈順序是從左到右,再從右到左,一個周期時間長度約4秒。
else if(SerialBuff[0]=='2')
{ SCISendN(10,"LED效果2 ");
light_a=0xff;
for(lk=0;lk<512;lk++)
Delay1000();
for(i=0;i<8;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=(0xff)^(3<<i);
for(lk=0;lk<512;lk++)
Delay1000();
}
}
light_a=0xff;
for(lk=0;lk<512;lk++)
Delay1000();
for(i=0;i<8;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=(0xff)^(0xc0>>i);
for(lk=0;lk<512;lk++)
Delay1000();
}
}
light_a=0xff;
}
//8個LED中只有一個燈亮,亮燈順序是從左到右,再從右到左,一個周期時間長度約8秒。
else if(SerialBuff[0]=='3')
{ SCISendN(10,"LED效果3 ");
light_a=0xff;
for(lk=0;lk<1024;lk++)
Delay1000();
for(i=0;i<8;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=(0xff)^(1<<i);
for(lk=0;lk<1024;lk++)
Delay1000();
}
}
light_a=0xff;
for(lk=0;lk<1024;lk++)
Delay1000();
for(i=0;i<8;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=(0xff)^(0x80>>i);
for(lk=0;lk<1024;lk++)
Delay1000();
}
}
light_a=0xff;
}
//8個LED中只有2個燈亮,亮燈順序是從左到右,再從右到左,一個周期時間長度約4秒。
else if(SerialBuff[0]=='4')
{ SCISendN(10,"LED效果4 ");
light_a=0xff;
for(lk=0;lk<1024;lk++)
Delay1000();
for(i=0;i<8;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=(0xff)^(3<<i);
for(lk=0;lk<1024;lk++)
Delay1000();
}
}
light_a=0xff;
for(lk=0;lk<1024;lk++)
Delay1000();
for(i=0;i<8;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=(0xff)^(0xc0>>i);
for(lk=0;lk<1024;lk++)
Delay1000();
}
}
light_a=0xff;
}
//收到其他字符:LED燈全部一起閃爍(同時亮同時熄,周期1秒),并向串行口發送字符串"輸入錯誤!"
else
{ SCISendN(10,"輸入錯誤!");
for(i=0;i<4;i++)
{if((ReSendStatusR & (1<<ReTestBit))==0)
{
light_a=0x00;
for(lk=0;lk<512;lk++)
{
for(p=0;p<2;p++)
Delay1000();//延長時間0.5秒
}
light_a=0xff;
for(lk=0;lk<512;lk++)
{
for(p=0;p<2;p++)
Delay1000();}
} //延長時間0.5秒
light_a=0xff;
}
}
}//接收效果演示結束;
}//while(1)尾部
}//主函數結束
//延時程序,延長時間1000個周期
void Delay1000(void)
{ unsigned char u;
for(u=0;u<=110;u++);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -