可控硅.docx

上传人:b****5 文档编号:8841606 上传时间:2023-05-15 格式:DOCX 页数:19 大小:18.10KB
下载 相关 举报
可控硅.docx_第1页
第1页 / 共19页
可控硅.docx_第2页
第2页 / 共19页
可控硅.docx_第3页
第3页 / 共19页
可控硅.docx_第4页
第4页 / 共19页
可控硅.docx_第5页
第5页 / 共19页
可控硅.docx_第6页
第6页 / 共19页
可控硅.docx_第7页
第7页 / 共19页
可控硅.docx_第8页
第8页 / 共19页
可控硅.docx_第9页
第9页 / 共19页
可控硅.docx_第10页
第10页 / 共19页
可控硅.docx_第11页
第11页 / 共19页
可控硅.docx_第12页
第12页 / 共19页
可控硅.docx_第13页
第13页 / 共19页
可控硅.docx_第14页
第14页 / 共19页
可控硅.docx_第15页
第15页 / 共19页
可控硅.docx_第16页
第16页 / 共19页
可控硅.docx_第17页
第17页 / 共19页
可控硅.docx_第18页
第18页 / 共19页
可控硅.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

可控硅.docx

《可控硅.docx》由会员分享,可在线阅读,更多相关《可控硅.docx(19页珍藏版)》请在冰点文库上搜索。

可控硅.docx

可控硅

/*************************************************************************

描述:

主程序

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()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2