|
引用 3 楼 cfanlwn 的回复:
给你个串口的程序 做参考
/************************************************************
* 程序功能:
* 硬件说明: AT89S51
*? ? ? ? ? P0? ? ? ? ? ? ? 七段数码管段选择接口
*? ? ? ? ? P2? ? ? ? ? ? ? 七段数码管位选择接口
*? ? ? ? ? p3? ? ? ? ? ? ? 按键
*1? 按键接到 P3 口。用一条 8PIN 数据排线,把按键部份的 JP48,接到 CPU 部份的 P3 口 JP53.
*2? 接 8 位数码管的数据线。将数码管部份的数据口 JP5 接到 CPU 部份的 P0 口 JP51.
*3? 接 8 位数码管的显示位线。将数码管部份的显示位口 JP8 接到 CPU 部份的 P2 口
************************************************************/
#include
#include
#include
/************************************************************
* 宏定义
************************************************************/
//端口连接定义
#define LEDCS P2_6? ? //选中第七个数码管
#define LEDCSPort P2? ? //七段数码管位选择接口
#define DispPort P0? ? ? //七段数码管段选择接口
//地址定义
//#define COM8155 (*((volatile unsigned char *) 0x00))//命令口地址,CS接地
#define COM8155 XBYTE[0x00] //命令口地址,CS接地
#define PA8155 XBYTE[0x01] //PA口地址
#define PB8155 XBYTE[0x02] //PB口地址
#define PC8155 XBYTE[0x03] //PC口地址
//命令字定义
#define PAIO? ? 1 < <0? ? //1=输出,0=输入
#define PBIO? ? 1 < <1? ? //1=输出,0=输入
#define PCIO? ? 3 < <2? ? //0=ALT1
//1=ALT3
? ? ? ? //2=ALT4
? ? ? ? ? ? ? ? //3=ALT2
//初始化命令字定义
#define IODIR PAIO|PBIO|PCIO //PA、PB、PC口为输出
/************************************************************
* 变量初始化
************************************************************/
unsigned char temp,RsvData;
unsigned char i;
bit flag = 1;
unsigned char TabNum[] = {0x28,0x7E,0xa2,0x62,0x74,
? ? ? ? ? ? ? ? ? ? ? ? 0x61,0x21,0x7A,0x20,0x60};
unsigned char *Table;
unsigned char Table0[] = {0x0d,0x0a,0x0d,0x0a,0x0d,0x0a,0x0d,0x0a};
unsigned char *Table1 = "命令口地址,CS接地";
unsigned char *Table2 = "PA口地址";
unsigned char *Table3 = "PC口地址";
unsigned char *Table4 = "如果我还有一天寿命,那天我要做你女友。我还有一天的命吗?..没有。所以,很可惜。我今生仍然不是你的女友。如果我有翅膀,我要从天堂飞下来看你。我有翅膀吗?..没有。所以,很遗憾。我从此无法再看到你。";
/************************************************************
* 函数功能:延时k ms函数
* 入口参数:k(1-128)
* 出口参数:无
* 作? ? 者:
//**********************************************************/
void Delaykms(unsigned char k)
{
? unsigned char n,s;
? for(n=2*k;n>0;n--)
? for(s=248;s>0;s--);
}
void main(void)
{
? ? TMOD = 0x22;? ? //设置串口工作方式
? ? SCON = 0x40;
? ? TH1 = 0xf3;? ? //设置速率4800(12M晶体)
? ? PCON = 0x80;
? ? TR1 = 1;
? ? REN = 1;? ? ? ? //允许接收
? ? LEDCS = 0;? ? ? //开数码管
? ? while(1)
? ? {
? ? ? ? if(!P3_2)
? ? ? ? {Delaykms(100);if(!P3_2){Delaykms(100);
? ? ? ? ? ? Table = Table1;
? ? ? ? ? ? flag = 1;}
? ? ? ? }
? ? ? ? if(!P3_3)
? ? ? ? {Delaykms(100);if(!P3_3){Delaykms(100);
? ? ? ? ? ? Table = Table2;
? ? ? ? ? ? flag = 1;}
? ? ? ? }
? ? ? ? if(!P3_4)
? ? ? ? {Delaykms(100);if(!P3_4){Delaykms(100);
? ? ? ? ? ? Table = Table3;
? ? ? ? ? ? flag = 1;}
? ? ? ? }
? ? ? ? if(!P3_5)
? ? ? ? {Delaykms(100);if(!P3_5){Delaykms(100);
? ? ? ? ? ? Table = Table4;
? ? ? ? ? ? flag = 1;}
? ? ? ? }
? ? ? ? while(flag)
? ? ? ? {?
? ? ? ? ? ?
? ? ? ? ? ? if(*Table)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? SBUF = *Table;
? ? ? ? ? ? ? ? while(!TI);
? ? ? ? ? ? ? ? TI = 0;
? ? ? ? ? ? ? ? Table++;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for(i=8;i>0;i--)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? SBUF = Table0;
? ? ? ? ? ? ? ? ? ? while(!TI);
? ? ? ? ? ? ? ? ? ? TI = 0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? flag = 0;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if(!RI);
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? RI = 0;
? ? ? ? ? ? RsvData = SBUF;
? ? ? ? ? ? switch (RsvData)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? case 0x30:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[0];break;
? ? ? ? ? ? ? ? case 0x31:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[1];break;
? ? ? ? ? ? ? ? case 0x32:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[2];break;
? ? ? ? ? ? ? ? case 0x33:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[3];break;
? ? ? ? ? ? ? ? case 0x34:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[4];break;
? ? ? ? ? ? ? ? case 0x35:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[5];break;
? ? ? ? ? ? ? ? case 0x36:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[6];break;
? ? ? ? ? ? ? ? case 0x37:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[7];break;
? ? ? ? ? ? ? ? case 0x38:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[8];break;
? ? ? ? ? ? ? ? case 0x39:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[9];break;
? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? break;? ?
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
建议下次有这种帖子,不要回复。这其实是害了lz! |
|