資源簡介
串口通信程序,附帶詳細(xì)說明!
//程序功能:接收串口發(fā)過來的字符,當(dāng)字符分別為12345的時候分別返回OKMCU字母,當(dāng)為其他字符的時候,把接收內(nèi)容返回。
#include
#include //內(nèi)部包含延時函數(shù) _nop_();
typedef unsigned char u8;
typedef unsigned int u16;
sbit SER_595 =P1^0; //串行數(shù)據(jù)輸入
sbit SCK_595 =P1^1; //移位時鐘脈沖
sbit RCK_595 =P1^2; //輸出鎖存器控制脈沖
u8 i,j,k;
u8 code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //數(shù)碼管編碼
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 temp,buf;
//u8 disbuf[2]={0x00,0x00};
void sdelay(u8 n) //延時程序
{
u8 i;
for(i=n;i>0;i--);
}
/*******************************************************
* *
* 驅(qū)動函數(shù) 595 *
* *
*******************************************************/
void smg595(u8 byte)
{
u8 num,c;
num=byte;
for(c=0;c<8;c++)
{
SCK_595=0;
num=num<<1;
SER_595=CY;
SCK_595=1;
}
for(c=0;c<8;c++)
{
SCK_595=0;
SER_595=0;
SCK_595=1;
}
RCK_595=0;
RCK_595=1;
}
void dis8(u8 r,u8 c) //數(shù)碼管顯示程序(第c個數(shù)碼管顯示r)
{
smg595(~(1<<c)); //數(shù)碼管位信號輸出
P0=table[r]; //數(shù)碼管段信號輸出
sdelay(10);
P0=0;
}
/*********************************************************
發(fā)送數(shù)據(jù)函數(shù)
*********************************************************/
void senddata(u8 dat)
{
SBUF =dat;
while(!TI);
TI = 0;
}
/*********************************************************
串行中斷服務(wù)函數(shù)
*********************************************************/
void serial() interrupt 4
{
RI = 0; //清除串行接受標(biāo)志位
ES = 0; //關(guān)閉串行中斷
buf = SBUF; //從串口緩沖區(qū)取得數(shù)據(jù)
switch(buf)
{
case 0x31: senddata('O');break; //接受到1,發(fā)送字符'O'給計算機(jī)
case 0x32: senddata('K');break; //接受到2,發(fā)送字符'K'給計算機(jī)
case 0x33: senddata('M');break; //接受到3,發(fā)送字符'M'給計算機(jī)
case 0x34: senddata('C');break; //接受到4,發(fā)送字符'C'給計算機(jī)
case 0x35: senddata('U');break; //接受到5,發(fā)送字符'U'給計算機(jī)
default: s
代碼片段和文件信息
//程序功能:接收串口發(fā)過來的字符,當(dāng)字符分別為12345的時候分別返回OKMCU字母,當(dāng)為其他字符的時候,把接收內(nèi)容返回。
#include
#include? ?//內(nèi)部包含延時函數(shù)?_nop_();
typedef??unsigned?char???u8;
typedef??unsigned?int????u16;
sbit??SER_595??=P1^0; //串行數(shù)據(jù)輸入
sbit??SCK_595??=P1^1;?? //移位時鐘脈沖
sbit??RCK_595??=P1^2;???//輸出鎖存器控制脈沖
u8?ijk;
u8?code?table[]={0x3f0x060x5b0x4f0x660x6d0x7d //數(shù)碼管編碼
????????????????????????0x070x7f0x6f0x770x7c0x390x5e0x790x71};
u8?tempbuf;
//u8?disbuf[2]={0x000x00};
void?sdelay(u8?n) //延時程序
{
u8?i;
for(i=n;i>0;i--);
}
/*******************************************************
*??????????????????????????????????????????????????????*
*?驅(qū)動函數(shù)??595??????????????????????????????????????*
*??????????????????????????????????????????????????????*
*******************************************************/
void?smg595(u8?byte)
{????
u8?numc;?
num=byte;??????
for(c=0;c<8;c++)
{
SCK_595=0;
num=num<<1;
SER_595=CY;
SCK_595=1;
}
for(c=0;c<8;c++)
{
SCK_595=0;
SER_595=0;
SCK_595=1;
}
RCK_595=0;
RCK_595=1;?
}
void?dis8(u8?ru8?c) //數(shù)碼管顯示程序(第c個數(shù)碼管顯示r)
{
smg595(~(1< P0=table[r]; //數(shù)碼管段信號輸出
sdelay(10);
P0=0;
}
/*********************************************************
??發(fā)送數(shù)據(jù)函數(shù)
*********************************************************/
void?senddata(u8?dat)
{
?????SBUF?=dat;
?????while(!TI);
?????TI?=?0;
}
/*********************************************************
??串行中斷服務(wù)函數(shù)
********************
- 上一篇:繼承和派生向量類模板和字符串類
- 下一篇:ekf對飛機(jī)位置進(jìn)行濾波
評論
共有 條評論