可控硅.docx
- 文档编号:8841606
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:19
- 大小:18.10KB
可控硅.docx
《可控硅.docx》由会员分享,可在线阅读,更多相关《可控硅.docx(19页珍藏版)》请在冰点文库上搜索。
可控硅
/*************************************************************************
描述:
主程序
CPU:
STC89LE52
晶振:
12MHZ
波特率:
4800bit/S
*************************************************************************/
#include"reg52.h"
#include"uart.h"
#include"intrins.h"
#include"tr.h"
#defineSTATE_RXD_IDLE0
#defineSTATE_RXD_HEAD1
#defineSTATE_RXD_DATA2
typedefunsignedcharBYTE;
typedefunsignedintWORD;
BYTEcounter;
bitTimer_Flag;
sbitSYS_LED=P2^0;
sbitKey1=P3^4;
sbitKey2=P3^5;
voidMCUInit(void);
voidDelay1(unsignedinttime);
bitLight_Ctr_Flag_1;
bitLight_Ctr_Flag_2;
BYTElight1,light2;/*调压值当为1,输出220V电压;当0,关闭输出;
调压值由小变大,则输出电压将由高变低。
调压值最大为80,大于80将转为0。
*/
BYTEchannel;
BYTEtemp;
BYTEnRXD_STATE;
BYTEnRxByteCnt=0;
BYTEpRXBUF[4];
BYTEBUF[4];
bitbReceived=0;
voidmain()
{
nRXD_STATE=STATE_RXD_IDLE;
light1=0;//第一路输出调压值
light2=0;//第二路输出调压值
counter=0;
Timer_Flag=0;
MCUInit();
UartIni();//InitUART
PrintCom("系统正常运行...\r\n");
while
(1)
{
if(Timer_Flag)
{
SYS_LED=!
SYS_LED;//系统正常运行指示状态
Timer_Flag=0;
}
if(Key1==0)//第一路输出控制
{
Delay1(100);
if(Key1==0)
{
if(light1==0)
{
Light_Ctr_Flag_1=1;
light1=80;
}
if(light1==1)
{
Light_Ctr_Flag_1=0;
}
if(Light_Ctr_Flag_1)
{
light1--;
}
else
{
light1++;
}
channel=0;
Control(light1,channel);
Delay1(2000);
}
}
if(Key2==0)//第二路输出控制
{
Delay1(100);
if(Key2==0)
{
if(light2==0)
{
Light_Ctr_Flag_2=1;
light2=80;
}
if(light2==1)
{
Light_Ctr_Flag_2=0;
}
if(Light_Ctr_Flag_2)
{
light2--;
}
else
{
light2++;
}
channel=1;
Control(light2,channel);
Delay1(2000);
}
}
if(bReceived)
{
bReceived=0;
switch(BUF[0])
{
case0x31:
{
channel=0;
Control(BUF[1],channel);
break;
}
case0x32:
{
channel=1;
Control(BUF[1],channel);
break;
}
default:
break;
}
}
}
}
voidMCUInit(void)
{
ET0=1;
ES=1;
EA=1;
Key1=1;
//DAT=1;
//CLK=1;
//STB=1;
P3|=0x1C;
}
voidTimer0_IRQ(void)interrupt1
{
TH0=0x3C;
TL0=0xB0;
if(counter==20)
{
counter=0;
Timer_Flag=1;
}
else
{
counter++;
}
}
voidUart_IRQ(void)interrupt4
{
BYTEnRxData;
if(RI)
{
RI=0;
nRxData=SBUF;
switch(nRXD_STATE)
{
caseSTATE_RXD_IDLE:
{
if(nRxData==0xE3)//Head
{
nRXD_STATE=STATE_RXD_HEAD;
nRxByteCnt=0;
}
break;
}
caseSTATE_RXD_HEAD:
{
if(nRxData==0x1C)//Head
{
nRXD_STATE=STATE_RXD_DATA;
nRxByteCnt=0;
}
else
{
nRXD_STATE=STATE_RXD_IDLE;
nRxByteCnt=0;
}
break;
}
caseSTATE_RXD_DATA:
//VoiceData
{
pRXBUF[nRxByteCnt]=nRxData;
nRxByteCnt++;
if(nRxByteCnt==4)
{
nRxByteCnt=0;
bReceived=1;
nRXD_STATE=STATE_RXD_IDLE;
for(temp=0;temp<4;temp++)
{
BUF[temp]=pRXBUF[temp];
}
}
break;
}
default:
break;
}
}
}
/*-----------------------------------------------------------------------------
函数功能:
延迟函数
-----------------------------------------------------------------------------*/
voidDelay1(unsignedinttime)
{
while(time--)
{
_nop_();
}
}
/*************************************************************************
描述:
ADC程序
*************************************************************************/
#include"reg52.h"
#include"intrins.h"
#include"adc.h"
#include"uart.h"
/*DeclareSFRassociatedwiththeADC*/
sfrADC_CONTR=0xBC;//ADCcontrolregister
sfrADC_RES=0xBD;//ADChigh8-bitresultregister
sfrADC_LOW2=0xBE;//ADClow2-bitresultregister
sfrP1ASF=0x9D;//P1secondaryfunctioncontrolregister
/*DefineADCoperationconstforADC_CONTR*/
#defineADC_POWER0x80//ADCpowercontrolbit
#defineADC_FLAG0x10//ADCcompleteflag
#defineADC_START0x08//ADCstartcontrolbit
#defineADC_SPEEDLL0x00//420clocks
#defineADC_SPEEDL0x20//280clocks
#defineADC_SPEEDH0x40//140clocks
#defineADC_SPEEDHH0x60//70clocks
voidDelay(WORDn);
/*----------------------------
InitialADCsfr
----------------------------*/
voidInitADC(void)
{
P1ASF=0xff;//Open8channelsADCfunction
ADC_RES=0;//Clearpreviousresult
ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
Delay
(2);//ADCpower-onanddelay
}
/*----------------------------
SendADCresulttoUART
----------------------------*/
voidShowResult(BYTEch)
{
UARTSendByte(ch);//ShowChannelNO.
UARTSendByte(GetADCResult(ch));//ShowADChigh8-bitresult
//ifyouwantshow10-bitresult,uncommentnextline
//SendData(ADC_LOW2);//ShowADClow2-bitresult
}
/*----------------------------
GetADCresult
----------------------------*/
BYTEGetADCResult(BYTEch)
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;
_nop_();//Mustwaitbeforeinquiry
_nop_();
_nop_();
_nop_();
while(!
(ADC_CONTR&ADC_FLAG));//Waitcompleteflag
ADC_CONTR&=~ADC_FLAG;//CloseADC
returnADC_RES;//ReturnADCresult
}
/*----------------------------
Softwaredelayfunction
----------------------------*/
voidDelay(WORDn)
{
WORDx;
while(n--)
{
x=5000;
while(x--);
}
}
/*************************************************************************
描述:
TR程序
*************************************************************************/
#include"REG52.H"
#include
#include"intrins.h"
//#include
sbitDAT=P1^7;
sbitCLK=P1^6;
sbitSTB=P1^5;
voidMyDelay(unsignedinttime);
/*-----------------------------------------------------------------------------
函数功能:
调光控制函数
-----------------------------------------------------------------------------*/
voidControl(unsignedcharcmd,unsignedcharch)
{
unsignedchari,dl,dh;
unsignedintdatas;
dh=cmd;
if(ch==1)dh|=0x80;
dl=~dh;
datas=dl;
datas|=dh<<8;//最终要发送的数据为16位
//高8位命令低8位取反效验
STB=0;//拉低片选
MyDelay(100);
for(i=0;i<16;i++)
{
CLK=0;
MyDelay(100);//这里大约是100us
if(datas&0x8000)DAT=1;
elseDAT=0;
CLK=1;
MyDelay(100);//这里大约是100us
datas<<=1;
}
DAT=1;
STB=1;
CLK=1;
}
/*-----------------------------------------------------------------------------
函数功能:
延迟函数
-----------------------------------------------------------------------------*/
voidMyDelay(unsignedinttime)
{
while(time--)
{
_nop_();
}
}
/*-----------------------------------------------------------------------------
KEY1
-----------------------------------------------------------------------------*/
/*voidKey00(void)//亮度加1灯
{
if(light1==0)light1=81;
if(light1>1)light1--;
channel=0;
Control(light1,channel);
}
voidLight1_add(void)
{
//LED=1;
if(light1==0)light1=81;
if(light1>1)light1--;
channel=0;
Control(light1,channel);
MyDelay(2000);
}*/
/*-----------------------------------------------------------------------------
KEY2
-----------------------------------------------------------------------------*/
/*voidKey01(void)//亮度减1灯
{
if(light1==0)return;
if(++light1>81)light1=0;
channel=0;
Control(light1,channel);
}
voidLight1_reduce(void)
{
if(light1==0)return;
if(++light1>81)light1=0;
channel=0;
Control(light1,channel);
MyDelay(2000);
}*/
/*-----------------------------------------------------------------------------
KEY5
-----------------------------------------------------------------------------*/
/*voidPowerOFF(void)//关机键
{
Control(0x00,0x00);
Control(0x00,0x01);
light1=0;
light2=0;
}*/
/*************************************************************************
描述:
串口API
CPU:
STC89LE52
晶振:
12MHZ
波特率:
4800bit/S
*************************************************************************/
#include"uart.h"
#include"reg52.h"
/************************************************************************
函数名:
串口初始化
功能描述:
STC89LE52单片机串口初始化函数
**************************************************************************/
voidUartIni(void)
{
SCON=0x50;//SCON:
serailmode1,8-bitUART,enableucvr
TMOD|=0x21;//TMOD:
timer1,mode2,8-bitreload
PCON|=0x80;//SMOD=1;
TH1=0xF3;//Baud:
4800fosc=12MHz
TH0=0x3C;
TL0=0xB0;
TR0=1;
TR1=1;
}
/************************************************************************
功能描述:
串口发送一字节数据
入口参数:
DAT:
带发送的数据
**************************************************************************/
voidUARTSendByte(unsignedcharDAT)
{
ES=0;
TI=0;
SBUF=DAT;
while(TI==0);
TI=0;
ES=1;
}
/************************************************************************
功能描述:
串口发送字符串数据
入口参数:
*DAT:
字符串指针
其他说明:
API供外部使用,直观!
**************************************************************************/
voidPrintCom(unsignedchar*DAT)
{
while(*DAT)
{
UARTSendByte(*DAT++);
}
}
/************************************************************************
功能描述:
SPI程序
**************************************************************************/
#include
#defineucharunsignedchar
#defineSCK2
uchardate[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
voidspi_init()
{
DDRB=0xf7;
SPCR=0X5E;
}
voidspiSendChar(uint8_tsend_char)
{
PORTB&=~(1< SPDR=send_char; while(! (SPSR&(1< PORTB|=(1< } intmain(void) { spi_init()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可控硅