/*--------------------------------------
芯片 :STC12C5A60S2
晶振 :11.0592MHZ
开发平台:KEIL
功能 :串口一或者串口二都可以通过上位机控制30路继电器
波特率 :9600BPS
日期 :11.5.19
注意 :下载完程序后请复位系统!!(切记!)
--------------------------------------*/
#include "STC12C5A60S2.h"
#include"jdq30.h"
#define uchar unsigned char
#define uint unsigned int
uchar dat;
void init ()
{
//串口2波特率
TMOD = 0x20; //定时器1产生波特率
SCON = 0x50; //方式1,8位数据,波特率可变
TH1=TL1 = 0xfd; //波特率 9600
//串口1波特率
S2CON = 0x50; //方式1,八位数据,可变波特率
BRT=0XFD; //设置波特率9600
TR1=1; //启动定时器产生串口2波特率
AUXR=0x10; //启动串口1波特率发生器
IP=0x00; //优先级默认
EA=1; //开总中断
ES=1; //开串口1中断
IE2=0x01; //开串口2中断
}
/*
// 串口一 发送一个字符
void uart1_txd(uchar x)
{
SBUF = x;
}
// 串口二 发送一个字符
void uart2_txd(uchar x)
{
S2BUF = x;
}
*/
/*--------------------------------------
延时函数
--------------------------------------*/
void delay ( uint t )
{
uint i,j;
for( i=0; i<t; i++)
for( j=0; j<250; j++);
}
/*--------------------------------------
主函数
--------------------------------------*/
void main()
{
uchar k=10;
P4SW|=0x20; //配置P4.5为IO口
P4M0|=0x10; //配置P4.4为IO口
P4M1|=0x10;
P0=P1=P2=P3=0xff;
P4|=0x30;
init();//串口初始化
while(1)
{
/********************************************************************
接收数据判断函数
*********************************************************************/
switch(dat) //接收数据判断
{
case 'I':
P0=P2=0;
P1&=0x0c;
P3&=0x03;
P4&=0xcf;
delay(200);
init();
break; // 全开
case 'i':
P3=P1=P0=P2=0XFF;
P4|=0x30;
delay(k);
break; // 全关
case 'A': OUT1=0;delay(k);break; // 第一路开
case 'B': OUT2=0;delay(k);break; // 第二路开
case 'C': OUT3=0;delay(k);break; // 第三路开
case 'D': OUT4=0;delay(k);break; // 第四路开
case 'E': OUT5=0;delay(k);break; // 第五路开
case 'F': OUT6=0;delay(k);break; // 第六路开
case 'G': OUT7=0;delay(k);break; // 第七路开
case 'H': OUT8=0;delay(k);break; // 第八路开
case 'J': OUT9=0;delay(k);break; // 第九路开
case 'K': OUT10=0;delay(k);break; // 第十路开
case 'L': OUT11=0;delay(k);break; // 第十一路开
case 'M': OUT12=0;delay(k);break; // 第十二路开
case 'N': OUT13=0;delay(k);break; // 第十三路开
case 'O': OUT14=0;delay(k);break; // 第十四路开
case 'P': OUT15=0;delay(k);break; // 第十五路开
case 'Q': OUT16=0;delay(k);break; // 第十六路开
case 'R': OUT17=0;delay(k);break; // ...
case 'S': OUT18=0;delay(k);break; // ...
case 'T': OUT19=0;delay(k);break; // ...
case 'U': OUT20=0;delay(k);break; // ...
case 'V': OUT21=0;delay(k);break; // ...
case 'W': OUT22=0;delay(k);break; // ...
case 'X': OUT23=0;delay(k);break; // ...
case 'Y': OUT24=0;delay(k);break; // ...
case 'Z': OUT25=0;delay(k);break; // ...
case '1': OUT26=0;delay(k);break; // ...
case '2': OUT27=0;delay(k);break; // ...
case '3': OUT28=0;delay(k);break; // ...
case '4': OUT29=0;delay(k);break; // ...
case '5': OUT30=0;delay(k);break; // 第三十路开
case 'a': OUT1=1;delay(k);break; // 第一路关
case 'b': OUT2=1;delay(k);break; // 第二路关
case 'c': OUT3=1;delay(k);break; // 第三路关
case 'd': OUT4=1;delay(k);break; // 第四路关
case 'e': OUT5=1;delay(k);break; // 第五路关
case 'f': OUT6=1;delay(k);break; // 第六路关
case 'g': OUT7=1;delay(k);break; // 第七路关
case 'h': OUT8=1;delay(k);break; // 第八路关
case 'j': OUT9=1;delay(k);break; // ...
case 'k': OUT10=1;delay(k);break; // ...
case 'l': OUT11=1;delay(k);break; // ...
case 'm': OUT12=1;delay(k);break; // ...
case 'n': OUT13=1;delay(k);break; // ...
case 'o': OUT14=1;delay(k);break; // ...
case 'p': OUT15=1;delay(k);break; // ...
case 'q': OUT16=1;delay(k);break; // ...
case 'r': OUT17=1;delay(k);break; // ...
case 's': OUT18=1;delay(k);break; // ...
case 't': OUT19=1;delay(k);break; // ...
case 'u': OUT20=1;delay(k);break; // ...
case 'v': OUT21=1;delay(k);break; // ...
case 'w': OUT22=1;delay(k);break; // ...
case 'x': OUT23=1;delay(k);break; // ...
case 'y': OUT24=1;delay(k);break; // ...
case 'z': OUT25=1;delay(k);break; // ...
case '6': OUT26=1;delay(k);break; // ...
case '7': OUT27=1;delay(k);break; // ...
case '8': OUT28=1;delay(k);break; // ...
case '9': OUT29=1;delay(k);break; // ...
case '0': OUT30=1;delay(k);break; // 第三十路关
default:break; // 跳出
}
}
}
/*--------------------------------------
串口一 发送接收中断函数
--------------------------------------*/
void uart_isr() interrupt 4
{
if( RI ) RI = 0;
dat = SBUF;
if( TI ) TI = 0;
}
/*--------------------------------------
串口二 发送接收中断函数
--------------------------------------*/
void uart2_isr() interrupt 8
{
if( S2CON & 0x01 )
{
S2CON &= ~0x01;
dat= S2BUF;
}
if( S2CON & 0x02 )
{
S2CON &= ~0x02;
}
}
|