導航:首頁 > 操作系統 > 單片機可控程序

單片機可控程序

發布時間:2022-10-05 11:06:12

① 求51單片機控制繼電器程序

程序就免了,給你幾個建議。

  1. 你最好把按鍵的程序和邏輯控制分開寫,這樣比較清晰,按鍵驅動的結果就是消抖以後的按鍵狀態,處理完清除,最好用固定時鍾驅動少用延時,按鍵驅動看著容易做好了還是不容易的。

  2. 邏輯控制無非就是if else。。。用全局量記錄之前的狀態,最好有個簡單明了的邏輯狀態圖否則很容易亂套,然後操作繼電器就是兩個io口就是了。

  3. 你用的這個和89c都是stc比較老的型號了,建議你到官網看看,很多新型號跑得更快,程序上能不能通用注意兩點,死等延時的時間和硬體上的區別。

  4. stc很多型號都用3.0和3.1口下載程序,所以按鍵會有影響,建議換個io口

  5. 繼電器的常開和常閉是接線決定的,按鍵常開和常閉可以用上下拉電阻來控制,硬體上處理一下,主要是要保證系統剛上電之前的這段時間的狀態是對的。

  6. 51和stm32是完全不同的cpu,如果要移植到stm32上初始化和寄存器操作是不一樣的,c語言的層面上大概只有邏輯控制這塊兒能用,而且stm32是3.3V硬體上也要處理。

  7. 這個做成並不難,做好就要花些心思,自己做才有意義解決問題就是學習的過程。

② 51單片機, 編一個控制步進電機轉動的程序。

#include <reg51.h> //51晶元管腳定義頭文件
#include <intrins.h>//內部包含延時函數 _nop_();

#define uchar unsigned char
#define uint unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

/********************************************************/
/*
/* 延時t毫秒
/* 11.0592MHz時鍾,延時約1ms
/*
/********************************************************/
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k<125; k++)
{ }
}
}
/********************************************************/
/*
/*步進電機正轉
/*
/********************************************************/
void motor_ffw(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //轉1×n圈
{
for (i=0; i<8; i++) //一個周期轉30度
{
P1 = FFW[i]; //取數據
delay(15); //調節轉速
}
}
}
/********************************************************/
/*
/*步進電機反轉
/*
/********************************************************/
void motor_rev(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //轉1×n圈
{
for (i=0; i<8; i++) //一個周期轉30度
{
P1 = REV[i]; //取數據
delay(15); //調節轉速
}
}
}
/********************************************************
*
* 主程序
*
*********************************************************/

main()
{
while(1)
{
motor_ffw(5); //電機正轉
delay(5000); //換向延時
//motor_rev(5); //電機反轉
//delay(1000); //換向延時
}
}

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

③ 單片機控制舵機程序

//12MHz
#include <reg51.h>

void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0B1;
TL0 = 0x0E0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void delay(void) //誤差 0us 延時1ms 此處可以修改高電平周期
//修改此處的延時可以更改舵機轉的角度 ,45度具體是多少 你可以試試
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main(void)
{
InitTimer0();
P1_2=0;
while(1);
}

void Timer0Interrupt(void) interrupt 1
{
//20ms中斷
TH0 = 0x0B1;
TL0 = 0x0E0;
P1_2=1;
delay();
P1_2=0;
}

④ 單片機可控制流水燈匯編程序 要求:按一下亮一個,再按一下第二個亮,第一個熄滅

/************************************
編寫者:XP
學習單片機一個星期,這是我自己寫的*/
#include<reg52.h>
sbit Key=P3^2;
sbit LED_1=P1^0;
sbit LED_2=P1^1;
/**********************************
*********延時函數*****************/
void Delay(int del)
{ int i,j;
for(i=0;i<=42;i++)
for(j=0;j<=del;j++) ;
}
void main()
{ while(1)
{ if(Key==0)
{ Delay(10); //軟體防抖,延時10ms
if(Key==0)
{ LED_1=0; //第一個燈亮
LED_2=1; //
Key=1;
Delay(250);
if(Key==0)
{ Delay(10); //軟體防抖,延時10ms
LED_1=1; //第一個滅
LED_2=0;} //第二個亮
}
}
Delay(300);
Key=1;
}
}

⑤ 單片機控制可控硅調壓程序

可控硅必須檢測過零信號。只有零點以後觸發,才會有效。而且在下一個零點到來的時候,可控硅會自動關閉。你這個程序裡面只有一句P=1,沒有P=0,那麼這個埠一直開啟,沒有關閉。負載將一直投入。不可能關閉。所以,根本不可能調壓!
想要調壓:1、增加一個過零檢測電路。
2、每次觸發以後,過一段時間必須把觸發信號關閉。也可以在過零中斷時,將觸發信號關閉。
3、調壓的大小值受過零後多長時間投入。注意10MS以內必須完成一次控制。否則控制將不正常。

⑥ 單片機控制可控硅調壓程序

可控硅必須檢測過零信號。只有零點以後觸發,才會有效。而且在下一個零點到來的時候,可控硅會自動關閉。你這個程序裡面只有一句P=1,沒有P=0,那麼這個埠一直開啟,沒有關閉。負載將一直投入。不可能關閉。所以,根本不可能調壓!
想要調壓:1、增加一個過零檢測電路。
2、每次觸發以後,過一段時間必須把觸發信號關閉。也可以在過零中斷時,將觸發信號關閉。
3、調壓的大小值受過零後多長時間投入。注意10MS以內必須完成一次控制。否則控制將不正常。

⑦ 基於51單片機的可控硅調壓調光程序-帶過零檢測

程序:
#include<reg52.h>
#include<intrins.h>
sbitledRS=P1^0;
sbitledRW=P1^1;
sbit ledE=P1^2;
sbit keyjia=P2^7;
sbitkeyjian=P2^6;
sbitcontrolLD=P1^3;
bitflag1=1;
bitflag2=1;
unsigned
char code table[]=" guang liang
";
unsignedchar code table1[]=" 00 ";
intnum,flag=0,count=0;
charliang=3;
voiddelaykt(void) //導通延時
{
unsigned char a;
for(a=2;a>0;a--);
}
voiddelay(int z) //可調延時
{
unsigned x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void
delay9ms(void) //誤差
-0.43402777778us 延時9ms
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=224;b>0;b--)
for(a=17;a>0;a--);
}
voidwrite_com(unsigned com) //寫指令
{
ledRS=0;
P0=com;
delay(10);
ledE=1;
delay(20);
ledE=0;
}
voidwrite_date(unsigned date) //寫數據
{
ledRS=1;
P0=date;
delay(10);
ledE=1;
delay(20);
ledE=0;
}
voidwrite_liang(unsigned liang) //寫亮度
{
int shi,ge;
shi=(liang-3)/10;
ge=(liang-3)%10;
write_com(0x80+0x40+7);
write_date(0x30+shi);
write_date(0x30+ge);
}
voidinit() //初始化
{
controlLD=1; //觸發控制初始化
ledRW=0; //液晶初始化
ledE=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delaykt();
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_date(table1[num]);
delaykt();
}
EA=1; //外部中斷設置
EX0=1;
IT0=1;
}
voidkeyscanf() //鍵盤判斷
{
if(keyjia==0) //加鍵判斷
{
delaykt();
if(keyjia==0)
{
if(flag1==1)
{
flag1=0;
liang++;
if(liang==10)
liang=3;
write_com(0x80+0x40+7);
write_liang(liang);
}
}
}
else if(keyjia!=0)
{
delaykt();
if(keyjia!=0)
flag1=1;
}
if(keyjian==0) //減鍵判斷
{
delaykt();
if(keyjian==0)
{
if(flag2==1)
{
flag2=0;
liang--;
if(liang==2)
liang=9;
write_com(0x80+0x40+7);
write_liang(liang);
}
}
}
else if(keyjian!=0)
{
delaykt();
if(keyjian!=0)
flag2=1;
}
}
voidzhongan() interrupt 0 //外部中斷
{
flag=1;
}
voidtimepd() //同步標志判斷與定時器設置
{
if(flag==1)
{
flag=0;
TMOD=0x01;
TH0=(65536-1000*(10-liang))/256;
TL0=(65536-1000*(10-liang))%256;
ET0=1;
TR0=1;
}
}
voidtime0() interrupt 1 //定時中斷程序
{
count=1;
}
voidchufa() //MOS3020觸發
{
if(count==1)
{
count=0;
controlLD=0;
delaykt();
controlLD=1;
delay9ms();
controlLD=0;
delaykt();
controlLD=1;
}
}
voidmain()
{
init();
while(1)
{
keyscanf();
timepd();
chufa();
}
}

⑧ 單片機觸發可控硅程序

寫程序要加註釋,否則放一段時間,自己都看不懂。提問時最好配上電路,起碼應該說明你的思路是怎樣的,3061是過零觸發還是普通的沒說明白。
我用下面這個 程序 做過零觸發可控硅,出現幾個問題請高手指點。
一,如果用定時器1 ,2.3角接3061光耦來觸發可控硅,負載燈泡時亮時暗。(定時器0用的常數值既把h換為100)不用定時器1燈就不時亮時暗。不知為啥?
二,不用定時器1, 用下程序,燈泡不亮,但shu2一樣計數,不會計到100停止(10ms)。若用常數h換為9000正常計數,換粉10001就不再計數。這又是怎麼回事?
三,若把h換為500以內的值時燈泡會亮,500以上就不再亮了。這也又是怎麼回事?
// 初看這些問題,好像都是數值超界了,0x9000就正常,0x10001就錯誤,應該是int型數超界了。
uchar k,m,shu1,shu2;
if(shu1==256)// shu1可能等於256嗎?
試一試軟模擬,你的問題應該不難解決。
自己思路要清晰

⑨ 單片機輸出電壓可控怎麼做

不知道你單片機輸出的波形是通過什麼形式的。如果是通過pwm的,可以是通過按鍵增加或減小pwm的脈寬值就可以了。具體程序在我的博客裡面就有一個關於按鍵設置pwm的文章,用的是pic單片機,你可以參考一下。

閱讀全文

與單片機可控程序相關的資料

熱點內容
程序員用得到數字區嗎 瀏覽:174
python求商 瀏覽:477
ipad能用c語言編譯器嗎 瀏覽:561
軟泥解壓球最新版 瀏覽:998
4萬程序員辭職創業 瀏覽:759
thinkingphp 瀏覽:597
安卓相冊移動文件夾 瀏覽:6
耳朵清潔解壓聲控99的人都睡得著 瀏覽:205
叉車出租網站源碼 瀏覽:874
共享單車的app是什麼 瀏覽:408
不帶gui的伺服器什麼意思 瀏覽:373
金剛經及PDF 瀏覽:102
php中冒號 瀏覽:358
php5432 瀏覽:352
命令在哪使用 瀏覽:172
php獲取網頁元素 瀏覽:708
為什麼需要硬體驅動編譯 瀏覽:885
pm編程怎樣看導柱孔對不對稱 瀏覽:138
農業大學選課找不到伺服器怎麼辦 瀏覽:659
路由配置網關命令 瀏覽:935