導航:首頁 > 操作系統 > 51單片機t12焊台程序編寫

51單片機t12焊台程序編寫

發布時間:2022-07-18 17:56:13

㈠ 51單片機 先後順序判斷 程序編寫問題

兩個狀態寄存器,一個保存上一狀態StatusLast,一個記錄當前狀態StatusCurrent;
if((StatusLast==Middle&&StatusCurrent==Low)||(StatusLast==Low&&StatusCurrent==High))
{報警}

㈡ 自焊51單片機燒錄程序

1)硬體部分,要焊好晶振及復位元件,與電源地線.(RS232與單片機的電源同一條線一起開斷電)--下載時,
2)RS232硬體串口引腳不要與單片機串口引腳接反了.
3)先點擊電腦上下載,再給單片機上電.也可看下載軟體的提示檢查.
4)可下新版的串口下載軟體,

㈢ 51單片機程序編寫(勞駕寫得詳細一點)

#include <reg51.h>
void delay(unsigned int n)
{
while(n--);
}
void main()
{
char i;
//可以編好想要怎麼流水的燈位的狀態
unsigned char led[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
while(1)
{
for(i=0;i<8;i++)
{
P1=led[i]; //LED接在P1口
delay(10000);
}
for(i=0;i<8;i++)
{
P1=led[8-i];
delay(10000);
}
}
}

㈣ C51單片機程序編寫

#include"reg52.h"
sbit Buzz = P1^6;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
bit flagoff = 0;
bit flagon = 1;
bit Startinterval = 0;
bit flag1s = 0;
bit flag2s,flag3s,flag4s,flag5s;
unsigned char index;
unsigned char flagtime = 0;
unsigned char flag2sec = 0;
unsigned char code LedChar[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char T0RH = 0;
unsigned char T0RL = 0;
void BuzzOn();
void ConfigTimer0(unsigned int ms);
void delay(unsigned int ms);
void main()
{
EA = 1;
ADDR0 = 0;
ADDR1 = 0;
ADDR2 = 0;
ADDR3 = 1;

ConfigTimer0(1);
P0 = LedChar[2];
while(1)
{

BuzzOn();
}
}
void BuzzOn()
{
if((flag2sec==0)&&(Startinterval==0))
{
Buzz = ~Buzz;
delay(10);
ENLED = 0;
}
if((flag2sec==1)&&(Startinterval==1))
{
Buzz = 1;
flag2sec = 1;
ENLED = 1;
}
}
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;

tmp = 11059200 / 12;
tmp = (tmp * ms) / 1000;
tmp = 65536 - tmp;
T0RH = (unsigned char)(tmp>>8);
T0RL = (unsigned char)tmp;
TMOD &= 0XF0;
TMOD |= 0X01;
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1;
TR0 = 1;
}
void delay(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=10;j>0;j--);
}
void InterruptTimer0() interrupt 1
{
static unsigned int count = 0;
static unsigned int j = 0;

TH0 = T0RH;
TL0 = T0RL;
if(Startinterval==0)
{
count++;
if(count==2000)
{
flag2sec = 1;
count = 0;
Startinterval = 1;
}
}
if(Startinterval==1)
{

j++;
if(flag1s==0)
{
if(j>=1000)
{
j = 0;
index = 1;
flag1s = 1;
flag2s = 0;
flag3s = 1;
flag4s = 1;
flag5s = 1;
Startinterval = 0;
flag2sec = 0;
}
}
if(flag2s==0)
{
if(j>=2000)
{
j = 0;
index = 2;
flag2s = 1;
flag3s = 0;
Startinterval = 0;
flag2sec = 0;
}
}
if(flag3s==0)
{
if(j>=3000)
{
j = 0;
index = 3;
flag3s = 1;
flag4s = 0;
Startinterval = 0;
flag2sec = 0;
}
}
if(flag4s==0)
{
if(j>=4000)
{
j = 0;
index = 4;
flag4s = 1;
flag5s = 0;
Startinterval = 0;
flag2sec = 0;
}
}
if(flag5s==0)
{
if(j>=5000)
{
j = 0;
index = 5;
flag5s = 1;
flag1s = 0;
Startinterval = 0;
flag2sec = 0;
}
}
}
}

㈤ 主要完成51單片機定時器的電路設計和程序編寫

傳說中的伸手黨么?這個不難,你可以自己寫。我幫你寫的話,對我來說太簡單,對你來說毫無幫助,也許幫你解決了當前的問題,但是以後呢,誰幫你?
可以告訴你怎麼寫。

1、上電顯示00:用個兩位七段數碼管做顯示,單片機使用動態掃描方式實現顯示。

2、按鍵S1遞增設置:按下S1時,讓預設的時間自加就可以了。
3、按S2可啟動定時器:定時器可以使用T0、T1甚至T2,寫好服務程序並且打開中斷之後,讓TR0/TR1等於1就可以了。

4、當定時時間到時 自動報警,……此處省略幾千字。

5、報警過程中按S1取消並預置時間:在報警子函數中寫判斷按鍵的程序就可以了。

再說一句,編譯軟體是KEIL,not kill

㈥ 51單片機程序編寫

最簡程序如下:

㈦ 51單片機程序編寫

/*這是用LCD顯示所測溫度的代碼,你參考一下,如果沒問題的話,其他的功能你再添加就好了,不難*/

#include<reg52.h>

#include<intrins.h>

#define uint unsigned int

#define uchar unsigned char

#define Nack_number 10

//**************埠定義**************************************************

uchar flag; //LCD控制線介面

sbit RS=P1^0; //RS端

sbit RW=P1^1; //讀寫端

sbit LCDE=P2^5; //使能端

//mlx90614埠定義

sbit SCK=P2^1; //時鍾線

sbit SDA=P2^2; //數據線

//************數據定義****************************************************

bdata uchar flag1; //可位定址數據

sbit bit_out=flag1^7;

sbit bit_in=flag1^0;

uchar tempH,tempL,err;


//************************** LCD1602 ***********************************

//向LCD寫入命令或數據*****************************************************

#define LCD_COMMAND 0 //命令

#define LCD_DATA 1 // 數據

#define LCD_CLEAR_SCREEN 0x01 // 清屏

#define LCD_HOMING 0x02 // 游標返回原點

//設置顯示模式******* 0x08+ *********************************************

#define LCD_SHOW 0x04 //顯示開

#define LCD_HIDE 0x00 //顯示關

#define LCD_CURSOR 0x02 //顯示游標

#define LCD_NO_CURSOR 0x00 //無游標

#define LCD_FLASH 0x01 //游標閃動

#define LCD_NO_FLASH 0x00 //游標不閃動

//設置輸入模式********** 0x04+ ********************************************

#define LCD_AC_UP 0x02 //游標右移 AC+

#define LCD_AC_DOWN 0x00 //默認 游標左移 AC-

#define LCD_MOVE 0x01 //畫面可平移

#define LCD_NO_MOVE 0x00 //默認 畫面不移動


//************************** mlx90614 ***********************************

//command mode 命令模式

#define RamAccess 0x00 //對RAM操作

#define EepomAccess 0x20 //對EEPRAM操作

#define Mode 0x60 //進入命令模式

#define ExitMode 0x61 //退出命令模式

#define ReadFlag 0xf0 //讀標志

#define EnterSleep 0xff //進入睡眠模式

//ram address read only RAM地址(只讀)

#define AbmientTempAddr 0x03 //周圍溫度

#define IR1Addr 0x04

#define IR2Addr 0x05

#define LineAbmientTempAddr 0x06 //環境溫度

/*0x0000 0x4074 16500 0.01/單元

-40 125*/

#define LineObj1TempAddr 0x07 //目標溫度,紅外溫度

/*0x27ad-0x7fff 0x3559 22610 0.02/單元

-70.01-382.19 0.01 452.2*/

#define LineObj2TempAddr 0x08

//eepom address EEPROM地址

#define TObjMaxAddr 0x00 //測量范圍上限設定

#define TObjMinAddr 0x01 //測量范圍下限設定

#define PWMCtrlAddr 0x02 //PWM設定

#define TaRangeAddr 0x03 //環境溫度設定

#define KeAddr 0x04 //頻率修正系數

#define ConfigAddr 0x05 //配置寄存器

#define SMbusAddr 0x0e //器件地址設定

#define Reserverd1Addr 0x0f //保留

#define Reserverd2Addr 0x19 //保留

#define ID1Addr 0x1c //ID地址1

#define ID2Addr 0x1d //ID地址2

#define ID3Addr 0x1e //ID地址3

#define ID4Addr 0x1f //ID地址4


//************函數聲明*****************************************************

void start(); //MLX90614發起始位子程序

void stop(); //MLX90614發結束位子程序

uchar ReadByte(void); //MLX90614接收位元組子程序

void send_bit(void); //MLX90614發送位子程序

void SendByte(uchar number); //MLX90614接收位元組子程序

void read_bit(void); //MLX90614接收位子程序

void delay(uint N); //延時程序

uint readtemp(void); //讀溫度數據

void init1602(void); //LCD初始化子程序

void busy(void); //LCD判斷忙子程序

void cmd_wrt(uchar cmd); //LCD寫命令子程序

void dat_wrt(uchar dat); //LCD寫數據子程序

void display(uint Tem); //顯示子程序

void Print(uchar *str); //字元串顯示程序


//*************主函數*******************************************

void main()

{

uint Tem; //溫度變數

SCK=1;

SDA=1;

delay(4);

SCK=0;

delay(1000);

SCK=1;

init1602(); //初始化LCD

while(1)

{

Tem=readtemp(); //讀取溫度

cmd_wrt(0x01); //清屏

Print(" Temperature: "); //顯示字元串 Temperature: 且換行

display(Tem); //顯示溫度

Print(" ^C"); //顯示攝氏度

delay(10000); //延時再讀取溫度顯示

}

}

void Print(uchar *str) //字元串顯示程序

{

while(*str!='') //直到字元串結束

{

dat_wrt(*str); //轉成ASCII碼

str++; //指向下一個字元

}

}


//*********輸入轉換並顯示*********

void display(uint Tem)

{

uint T,a,b;

T=Tem*2;

if(T>=27315) //溫度為正

{

T=T-27315; //

a=T/100; //溫度整數

b=T-a*100; //溫度小數

if(a>=100) //溫度超過100度

{

dat_wrt(0x30+a/100); //顯示溫度百位

dat_wrt(0x30+a%100/10); //顯示溫度十位

dat_wrt(0x30+a%10); //顯示溫度個位

}

else if(a>=10) //溫度超過10度

{

dat_wrt(0x30+a%100/10); //顯示溫度十位

dat_wrt(0x30+a%10); //顯示溫度個位

}

else //溫度不超過10度

{

dat_wrt(0x30+a); //顯示溫度個位

}

dat_wrt(0x2e); //顯示小數點

if(b>=10) //溫度小數點後第1位數不等於0

{

dat_wrt(0x30+b/10); //顯示溫度小數點後第1位數

dat_wrt(0x30+b%10); //顯示溫度小數點後第2位數

}

else //溫度小數點後第1位數等於0

{

dat_wrt(0x30); //顯示溫度小數點後第1位數0

dat_wrt(0x30+b); //顯示溫度小數點後第2位數

}

}

else //溫度為負

{

T=27315-T;

a=T/100;

b=T-a*100;

dat_wrt(0x2d); //顯示負號

if(a>=10) //溫度低於負10度

{

dat_wrt(0x30+a/10); //顯示溫度十位

dat_wrt(0x30+a%10); //顯示溫度個位

}

else //溫度高於負10度

{

dat_wrt(0x30+a); //顯示溫度個位

}

dat_wrt(0x2e); //顯示小數點

if(b>=10) //溫度小數點後第1位數不等於0

{

dat_wrt(0x30+b/10); //顯示溫度小數點後第1位數

dat_wrt(0x30+b%10); //顯示溫度小數點後第2位數

}

else //溫度小數點後第1位數等於0

{

dat_wrt(0x30); //顯示溫度小數點後第1位數0

dat_wrt(0x30+b); //顯示溫度小數點後第2位數

}

}

}

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

void start(void) //停止條件是 SCK=1時,SDA由1到0

{

SDA=1;

delay(4);

SCK=1;

delay(4);

SDA=0;

delay(4);

SCK=0;

delay(4);

}

//------------------------------

void stop(void) //停止條件是 SCK=1時,SDA由0到1

{

SCK=0;

delay(4);

SDA=0;

delay(4);

SCK=1;

delay(4);

SDA=1;

}

//---------發送一個位元組---------

void SendByte(uchar number)

{

uchar i,n,dat;

n=Nack_number; //可以重發次數

Send_again:

dat=number;

for(i=0;i<8;i++) //8位依次發送

{

if(dat&0x80) //取最高位

{

bit_out=1; //發1

}

else

{

bit_out=0; //發0

}

send_bit(); //發送一個位

dat=dat<<1; //左移一位

}

read_bit(); //接收1位 應答信號

if(bit_in==1) //無應答時重發

{

stop();

if(n!=0)

{

n--; //可以重發Nack_number=10次

goto Repeat; //重發

}

else

{

goto exit; //退出

}

}

else

{

goto exit;

}

Repeat:

start(); //重新開始

goto Send_again; //重發

exit: ; //退出

}

//-----------發送一個位---------

void send_bit(void)

{

if(bit_out==1)

{

SDA=1; //發1

}

else

{

SDA=0; //發0

}

_nop_();

SCK=1; //上升沿

delay(4);delay(4);

SCK=0;

delay(4);delay(4);

}

//----------接收一個位元組--------

uchar ReadByte(void)

{

uchar i,dat;

dat=0; //初值為0

for(i=0;i<8;i++)

{

dat=dat<<1; //左移

read_bit(); //接收一位

if(bit_in==1)

{

dat=dat+1; //為1時對應位加1

}

}

SDA=0; //發送應答信號0

send_bit();

return dat; //帶回接收數據

}

//----------接收一個位----------

void read_bit(void)

{

SDA=1; //數據端先置1

bit_in=1;

SCK=1; //上升沿

delay(4);delay(4);

bit_in=SDA; //讀數據

_nop_();

SCK=0;

delay(4);delay(4);

}



//------------------------------

uint readtemp(void)

{

SCK=0;

start(); //開始條件

SendByte(0x00); //發送從地址00

SendByte(0x07); //發送命令

start(); //開始條件

SendByte(0x01); //讀從地址00

bit_out=0;

tempL=ReadByte(); //讀數據低位元組

bit_out=0;

tempH=ReadByte(); //讀數據高位元組

bit_out=1;

err=ReadByte(); //讀錯誤信息碼

stop(); //停止條件

return(tempH*256+tempL);

}

//******************LCD顯示子函數***********************

void init1602(void) //初始化LCD

{

cmd_wrt(0x01); //清屏

cmd_wrt(0x0c); //開顯示,不顯示游標,不閃爍

cmd_wrt(0x06); //完成一個字元碼傳送後,游標左移,顯示不發生移位

cmd_wrt(0x38); //16×2顯示,5×7點陣,8位數據介面

}

void busy(void) //LCD忙標志判斷

{

flag=0x80; //賦初值 高位為1 禁止

while(flag&0x80) //讀寫操作使能位禁止時等待 繼續檢測

{

P0=0xff;

RS=0; //指向地址計數器

RW=1; //讀

LCDE=1; //信號下降沿有效

flag=P0; //讀狀態位 高位為狀態

LCDE=0;

}

}

void cmd_wrt(uchar cmd) //寫命令子函數

{

LCDE=0;

busy(); //檢測 讀寫操作使能嗎

P0=cmd; //命令

RS=0; //指向命令計數器

RW=0; //寫

LCDE=1; //高電平有效

LCDE=0;

}

void dat_wrt(uchar dat) //寫數據子函數

{

busy(); //檢測 讀寫操作使能嗎

LCDE=0;

if(flag==16)

{

RS=0; //指向指令寄存器

RW=0; //寫

P0=0XC0; //指向第二行

LCDE=1; //高電平有效

LCDE=0;

}

RS=1; //指向數據寄存器

RW=0; //寫

P0=dat; //寫數據

LCDE=1; //高電平有效

LCDE=0;

}

//------------延時--------------

void delay(uint n)

{

uint j;

for(j=0;j<n;j++)

{

_nop_();

}

}


㈧ 如何做一個stm32 t12焊台

溫控就可以啊,t12是電偶,很簡單,可以用編碼器調整溫度,也可以用按鍵,設定休眠時間,再加上一個磁珠感測器,檢測烙鐵的手柄是否有動作,來激活休眠

㈨ 單片機怎樣控制t12電烙鐵

T12白光電烙鐵控制電路的工作過程,很早以前就有網友分析,一直看得有點糊塗,今日仔細分析了動作過程,已經完全理解了,特寫出心得如下:

控制板的電路一般如下:

①、電路中358的2腳預置了熱電偶在規定溫度下的信號電壓值(mV級的),當電路上電時,3腳電壓低於2腳,1腳輸出低電平,T4將6腳箝位為低電平,7腳會輸出高電平,三極體飽和,TPC8107的G極點位降低而導通,電源開始為T12供電。

②、電源為T12供電時,電源電壓通過電阻103為電容器C103充電,短時可使3腳的電平高於2腳,1腳翻轉為高電平。

③、T4將1腳的高電平隔離,6腳通過電阻205給電容104緩慢充電,延時到6腳電位高於5腳時,7腳輸出低電平,三極體截止,TPC8107截止,停止向T12供電。

④、一旦TPC8107截止,停止向T12供電。則358的3腳電壓將迅速變為低電平。這里要注意了,這個低電平實際上等於從T12端通過電阻103傳來的熱電偶的信號電壓。如果此時熱電偶的信號電壓還低於預置的2腳電平,則電路狀態將重復①的狀態,進行①②③④循環。 如果此時熱電偶的信號電壓已經高於預置的2腳電平,則意味著烙鐵頭溫度已經達到預設值,358將不會翻轉,一直等待3腳的電平再次降低到2腳的預置值以下,才開始再次翻轉為T12供電。這樣的動作保持著T12頭子的恆溫狀態。

以上紅色字體部分,是以前的分析資料沒有明確說清楚的,這是這個控制電路能控制T12白光溫度的精髓所在。

總言之,控制電路是脈沖狀態地為T12供電,脈沖寬度取決於運放5腳上205的電阻給104電容充電的速度。脈沖間隔很小,取決於運放3腳上103電容器的電荷經103的電阻再經T12的發熱絲泄放的速度。在脈沖間隔期間,電路才真正檢測熱電偶的信號,確定脈沖供電是否應該繼續進行,從而實現烙鐵頭的恆溫。

㈩ 把51單片機的電路板焊接完畢後,該如何輸入程序進行調試

一個辦法是用編程器寫入晶元內,再有就是如果你的板子留有下載程序的接線方式,一般是ISP,可以通過下載線下載。

閱讀全文

與51單片機t12焊台程序編寫相關的資料

熱點內容
閩政通無法請求伺服器是什麼 瀏覽:48
怎麼做積木解壓神器 瀏覽:203
王者榮耀解壓玩具抽獎 瀏覽:49
12位是由啥加密的 瀏覽:868
程序員編迷你世界代碼 瀏覽:895
php取現在時間 瀏覽:246
單片機高吸收 瀏覽:427
怎麼區分五代頭是不是加密噴頭 瀏覽:244
hunt測試伺服器是什麼意思 瀏覽:510
2013程序員考試 瀏覽:641
畢業論文是pdf 瀏覽:736
伺服器跑網心雲劃算嗎 瀏覽:471
單片機定時器計數初值的計算公式 瀏覽:801
win7控制台命令 瀏覽:567
貓咪成年app怎麼升級 瀏覽:692
360有沒有加密軟體 瀏覽:315
清除cisco交換機配置命令 瀏覽:751
華為刪除交換機配置命令 瀏覽:473
shell打包命令 瀏覽:827
加密狗插上輸不了密碼 瀏覽:187