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