資源簡介
【核心代碼】
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#define uchar unsigned char
#define uint unsigned int
#define LED P0
uchar const dofly[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,
0x0b,0x0c,0x0d,0x0e,0x0f};//0-F
/*------------------------------------------------
函數聲明
------------------------------------------------*/
uchar keyscan(void);//鍵盤掃描
void delay(uint i); //演示程序
void send(uchar str);//發送數據程序
void receive(void); //接收數據程序
void read_key(void);//讀鍵值函數
/*------------------------------------------------
主函數
------------------------------------------------*/
void main()
{
TMOD=0x20; //定時器1,方式2
TL1=0xfd;
TH1=0xfd; //設置波特率9600
SCON=0xd8;
PCON=0x00; //串行口方式3,允許接收位
TR1=1; //打開定時器1
P2=0xff; //拉高P2口
while(1)
{
read_key(); //讀按鍵程序
//receive(); //接收數據程序
}
}
/*------------------------------------------------
讀鍵值函數
------------------------------------------------*/
void read_key(void)
{
uchar key;
key=keyscan(); //調用鍵盤掃描,
switch(key)
{
case 0xee:send(dofly[0]);break;//0 按下相應的鍵顯示相對應的碼值
case 0xed:send(dofly[1]);break;//1
case 0xeb:send(dofly[2]);break;//2
case 0xe7:send(dofly[3]);break;//3
case 0xde:send(dofly[4]);break;//4
case 0xdd:send(dofly[5]);break;//5
case 0xdb:send(dofly[6]);break;//6
case 0xd7:send(dofly[7]);break;//7
case 0xbe:send(dofly[8]);break;//8
case 0xbd:send(dofly[9]);break;//9
case 0xbb:send(dofly[10]);break;//a
case 0xb7:send(dofly[11]);break;//b
case 0x7e:send(dofly[12]);break;//c
case 0x7d:send(dofly[13]);break;//d
case 0x7b:send(dofly[14]);break;//e
case 0x77:send(dofly[15]);break;//f
}
}
/*------------------------------------------------
鍵盤掃描程序
------------------------------------------------*/
uchar keyscan(void) //鍵盤掃描函數,使用行列反轉掃描法
{
uchar key;
uchar cord_h,cord_l;//行列值中間變量
P2=0x0f; //行線輸出全為0
cord_h=P2&0x0f; //讀入列線值
if(cord_h!=0x0f) //先檢測有無按鍵按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P2&0x0f; //讀入列線值
P2=cord_h|0xf0; //輸出當前列線值
cord_l=P2&0xf0; //讀入行線值
key=cord_h cord_l;//鍵盤最后組合碼值
}
}
return(key); //返回該值
}
/*------------------------------------------------
發送數據函數
------------------------------------------------*/
void send(uchar str)
{
if(TI==0)
{
SBUF=str;
while(TI==0);
TI=0;
}
}
/*------------------------------------------------
接收數據函數
------------------------------------------------*/
void receive(void)
{
while(RI==0);
RI=0;
P0=SBUF; //立即點亮LED
}
/*------------------------------------------------
延時程序
------------------------------------------------*/
void delay(uint i) //延時函數
{
while(i--);
}
代碼片段和文件信息
#include?//包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#define?uchar?unsigned?char
#define?uint??unsigned?int
#define?LED???P0
sbit?WR2?=?P3^2;????//?控制MAX487發送接收方式
/*------------------------------------------------
???????????????????函數聲明
------------------------------------------------*/?
void?delay(uint?i);?//演示程序
void?receive(void);??//接收數據程序
/*------------------------------------------------
???????????????串口中斷服務程序
------------------------------------------------*/
void?UART(void)?interrupt?4?using?1
{
?if(RI)
?{
??LED=SBUF;
??RI=0;
?}
}
/*------------------------------------------------
???????????????????主函數
------------------------------------------------*/
void?main()
{
?TMOD=0x20;??????//定時器1,方式2
?TL1=0xfd;
?TH1=0xfd; ?//設置波特率9600
?SCON=0xd8;
?PCON=0x00; ?//串行口方式3,允許接收位
?TR1=1; ?//打開定時器1
?ES=1; ?//開串口中斷
?EA=1;???????????//開總中斷
?WR2=0;??????????//MAX487為接收方式
?while(1);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????195082??2013-07-04?15:31??3、PC到單片機單向通訊\Last?Loaded?串口通信.DBK
?????文件?????195179??2013-07-05?18:11??3、PC到單片機單向通訊\串口通信.DSN
?????文件???????2954??2013-07-05?18:11??3、PC到單片機單向通訊\串口通信.PWI
?????文件?????????19??2011-05-20?00:11??3、PC到單片機單向通訊\串口通信receive(中斷方式)\ExtDll.iex
?????文件???????6376??2010-09-03?17:12??3、PC到單片機單向通訊\串口通信receive(中斷方式)\STARTUP.A51
?????文件??????14062??2013-06-26?14:15??3、PC到單片機單向通訊\串口通信receive(中斷方式)\STARTUP.LST
?????文件????????749??2013-06-26?14:15??3、PC到單片機單向通訊\串口通信receive(中斷方式)\STARTUP.OBJ
?????文件???????2758??2013-06-26?14:15??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART
?????文件???????1076??2013-06-26?14:15??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.c
?????文件????????195??2013-06-26?14:16??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.hex
?????文件?????????41??2013-06-26?14:15??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.lnp
?????文件???????2762??2013-06-26?14:15??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.LST
?????文件???????4866??2013-06-26?14:15??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.M51
?????文件???????2259??2013-06-26?14:15??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.OBJ
?????文件????????235??2013-06-26?16:36??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.plg
?????文件?????143665??2013-06-26?16:36??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.uvopt
?????文件??????13408??2011-05-20?00:18??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART.uvproj
?????文件?????143658??2013-06-26?16:31??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART_uvopt.bak
?????文件??????13392??2011-05-19?23:11??3、PC到單片機單向通訊\串口通信receive(中斷方式)\UART_uvproj.bak
?????文件?????????19??2013-06-27?13:41??3、PC到單片機單向通訊\串口通信receive(查詢方式)\ExtDll.iex
?????文件???????6376??2010-09-03?17:12??3、PC到單片機單向通訊\串口通信receive(查詢方式)\STARTUP.A51
?????文件??????14062??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\STARTUP.LST
?????文件????????749??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\STARTUP.OBJ
?????文件???????6729??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\UART
?????文件???????3860??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\UART.c
?????文件???????1455??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\UART.hex
?????文件?????????41??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\UART.lnp
?????文件???????7162??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\UART.LST
?????文件???????9635??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\UART.M51
?????文件???????6803??2013-07-04?14:15??3、PC到單片機單向通訊\串口通信receive(查詢方式)\UART.OBJ
............此處省略45個文件信息
評論
共有 條評論