51對于繼電器的控制,只用高低電平就可以了。關(guān)鍵是,你在明晌你的程序里要有一個判斷子程序,判斷單片機(jī)從PC機(jī)(通過RS485)穿過來的謹(jǐn)賀是什么數(shù)據(jù),從而對單片機(jī)的某位置位或者復(fù)位。比如:你可以用一個if語句,如果收到的數(shù)據(jù)時11111,在置位,如果收到的數(shù)據(jù)時00000,則復(fù)位,相應(yīng)的繼激晌鋒電器就會動作了。

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、華州網(wǎng)絡(luò)推廣、微信小程序、華州網(wǎng)絡(luò)營銷、華州企業(yè)策劃、華州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供華州建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:chinadenli.net
沒有芯片和設(shè)備,所以程序沒調(diào),有問題可以再q我。
光敏傳感器是個檢測設(shè)備,你要怎么控制它。
#includestc15f2kxx.h
#define?u16?unsigned?int
#define?u8?unsigned?char
sbit?PHOTORESISTOR=P3^7;
sbit?RELAY=P3^6;
sbit?BEEP=P4^5;
u8?ds[8]={0,1,2,3,4,5,6,7,};?//數(shù)碼管顯示緩存
u8?smg_zt=1;
//共陽
code?u8?w[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; //位碼
code?u8?d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,};//斷碼
void?dispaly(){//顯示函數(shù)
static?u8?a;
if(++a=8)a=0;
P0=0xff;
P2=w[a];
P0=d[ds[a]];
}
/*
//共陰
code?u8?w[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80,}; //位碼
code?u8?d[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,0x00,};//斷碼
void?dispaly(){//顯示函數(shù)
static?u8?a;
if(++a=8)a=0;
P0=0x00;
P2=w[a];
P0=d[ds[a]];
}
*/
#define?UART_RX_SIZE?30
u8?uartRx_buf[UART_RX_SIZE];
u8?uartRx_count=0;
u8?uartRx_outtime=0;
void?UartInit(void) //9600bps@11.0592MHz
{
SCON?=?0x50; //8位數(shù)搜陵團(tuán)據(jù),可變波特率
AUXR?|=?0x40; //定時器1時鐘為Fosc,即1T
AUXR?=?0xFE; //串口1選擇定時器1為波特率發(fā)生器
TMOD?=?0x0F; //設(shè)定定時器1為16位自動重裝方式
TL1?=?0xE0; //設(shè)定定時初值
TH1?=?0xFE; //設(shè)定定時初值
ET1?=?0; //禁止定時器1中斷
TR1?=?1; //啟動定時器1
}
void?Send_byte(u8?val){
SBUF=val;
while(!TI);
TI=0;
}
void?Send_Uart(u8?*p,u8?size){
while(size--0){
Send_byte(*p);
p++;
}
}
void?Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR?|=?0x80; //定時器時鐘1T模式
TMOD?=?0xF0; //設(shè)置定時器模式
TL0?=?0xCD; //設(shè)置定時世橘初值
TH0?=?0xD4; //設(shè)置定時初值
TF0?=?0; //清除TF0標(biāo)志
TR0?=?1; //定時器0開始計時
}
void?IO_Init(){
P0M1=0x00;//P0口和P2口設(shè)為強(qiáng)推挽輸出
P0M0=0xff;
P2M1=0x00;
P2M0=0xff;
}
void?init() //初始化函數(shù)
{???
IO_Init();
UartInit();
Timer0Init();
}
//判斷兩個字符串是否相等
u8?puanduan(u8?*p,u8?size,u8?*pp){
u8?i;
for(i=0;pp[i]!=0;i++){
if(i=size)return?0;
if(p[i]!=pp[i])return?0;
}
return?1;
}
//串口解析程序
void?UART_Protocol(){
if(uartRx_outtime=10汪鄭uartRx_count=3){
if(puanduan(uartRx_buf,uartRx_count,"lightsensor:on")!=0){
}else?if(puanduan(uartRx_buf,uartRx_count,"lightsensor:off")!=0){
}else?if(puanduan(uartRx_buf,uartRx_count,"digital:on")!=0){
??smg_zt=1;
}else?if(puanduan(uartRx_buf,uartRx_count,"digital:off")!=0){
smg_zt=0;
}else?if(puanduan(uartRx_buf,uartRx_count,"relay:on")!=0){
RELAY=0;
}else?if(puanduan(uartRx_buf,uartRx_count,"relay:off")!=0){
RELAY=1;
}else?if(puanduan(uartRx_buf,uartRx_count,"beep:on")!=0){
BEEP=1;
}else?if(puanduan(uartRx_buf,uartRx_count,"beep:off")!=0){
}
uartRx_count=0;
}
}
void?main()//主函數(shù)
{
u8?i;
init();
while(1){
UART_Protocol();
if(smg_zt==1){
for(i=0;i8;i++)ds[i]=i;
}else?{
for(i=0;i8;i++)ds[i]=10;
}
}
}
void?timer0()?interrupt?1//定時器,實(shí)現(xiàn)倒計時
{???
dispaly();
if(++uartRx_outtime=100){
uartRx_outtime=0;
uartRx_count=0;
}
}
void?uart0()?interrupt?4
{
if(RI){
u8?t=SBUF;RI=0;
uartRx_outtime=0;
if(uartRx_countUART_RX_SIZE){
uartRx_buf[uartRx_count++]=t;
}
}
}
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
uchar Count = 0; //20ms計數(shù)
uchar SecCount = 0; // 1m計數(shù)
sbit DELAY = P2^0; //P20引腳控制繼電器
/********************************************************************
* 名稱 : Time0_Init()
* 功能 : 定時器的初始化,11.0592MZ晶振,50ms
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Time0_Init()
{
TMOD = 0x01;
IE = 0x82;
TH0 = 0x4c;
TL0 = 0x00;
TR0 = 1;
}
/********************************************************************
* 名稱 : Time0_Int()
* 功悶乎能 : 定時器中斷,中斷中實(shí)現(xiàn) Count 加一
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Time0_Int() interrupt 1
{
TH0 = 0x4c;
TL0 = 0x00;
Count++;
if(Count == 20)//中斷20次,等于1s
{
Count = 0;
SecCount ++; //秒數(shù)加1
}
}
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入纖信 : 無
* 輸出 : 無
***********************************************************************/
void main()
{
RELAY = 1; //上電使繼電器處于關(guān)閉狀態(tài).圖中的8550三極管,低電平時為繼電器打開,高電平關(guān)閉.
Time0_Init(); //定時器初始化
while(1)
{
if(SecCount == 120) //當(dāng)螞豎悉SecCount等于120秒時
{
RELAY = ~RELAY; //繼電器狀態(tài)取反,原本關(guān)閉的打開,
}
}
}
當(dāng)前標(biāo)題:c語言繼電器函數(shù) c語言中繼續(xù)
本文鏈接:http://chinadenli.net/article47/dspjehj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、域名注冊、外貿(mào)建站、品牌網(wǎng)站設(shè)計、靜態(tài)網(wǎng)站、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)