99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

【原創(chuàng)】新手自學(xué)單片機(jī)分享之基于51單片機(jī)的功率計(jì)設(shè)計(jì)(歡迎大家來指點(diǎn))

從開始自學(xué)單片機(jī)到現(xiàn)在斷斷續(xù)續(xù)已有一個(gè)多月,為了鞏固所學(xué),學(xué)以致用,想著利用所學(xué)做些東西出來,由于我現(xiàn)在工作是做電源的,所以計(jì)劃使用51單片機(jī)做一款功率計(jì)出來,可以測量電源輸出的直流電壓電流和功率,實(shí)用性和性能暫時(shí)就不要求自己了,能實(shí)現(xiàn)功能就好,目標(biāo)是能把所學(xué)東西在里面全都實(shí)踐一番,利用手上一塊51開發(fā)板,計(jì)劃逐步實(shí)現(xiàn)以下功能:

    第一步:AD檢測電壓電流,利用分壓電阻采集電壓,在電路中串聯(lián)檢測電阻采樣電流值,并經(jīng)AD轉(zhuǎn)換后使用LCD顯示出來電壓電流和功率。

                這部分練習(xí)AD轉(zhuǎn)換和1602LCD顯示的操作,AD使用pcf8591,可以學(xué)習(xí)IIC協(xié)議的使用。

    第二步:增加使用LED數(shù)碼管即時(shí)顯示溫度和時(shí)鐘。不進(jìn)行測量時(shí)LED不顯示,換LCD顯示溫度和時(shí)鐘。

    第三步:可手動(dòng)設(shè)置測量電壓電流量程,也可自動(dòng)選擇測量量程,可以手動(dòng)設(shè)置電壓電流溫度異常值,檢測到有異常時(shí)自動(dòng)報(bào)警。

    第四步:將測量值通過按鍵記錄在EEPROM中,按鍵可查看最近記錄的電壓電流和溫度值。

    第五步:通過串口將測量參數(shù)顯示在電腦上,也可通過電腦控制實(shí)現(xiàn)以上功能(最近看到有個(gè)叫l(wèi)abvie的東西,可能能用到)。

    ... ...

目前能想到的就這么多,可能做的過程中會(huì)有些改動(dòng),也可能會(huì)增加一些其他功能來練習(xí)所學(xué),歡迎大家多多指導(dǎo)。

后續(xù)會(huì)逐步將進(jìn)度貼上來供大家指正。

全部回復(fù)(12)
正序查看
倒序查看
Deaby
LV.3
2
2014-06-10 23:39

第一步已實(shí)現(xiàn):

代碼如下:

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

#include

#define uint unsigned int

#define uchar unsigned char

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

uchar code DATE1[]="WELCOM TO BOE";    //LCD顯示相關(guān)參數(shù)定義

uchar code DATE2[]="VIP TEST SYSTEM!";

uchar code DATE3[]="U=000.00V _P(W) ";

uchar code DATE4[]="I=00.000A _000.0";

uchar code DATE5[]={            //1602 LCD 0~9編碼

0X30,0X31,0X32,0X33,0X34,

0X35,0X36,0X37,0X38,0X39};

sbit LCDRS=P2^4;

sbit LCDRW=P2^5;

sbit LCDEN=P2^6;

unsigned long U,I,PW,TTU,TTI,TTP;

double Tu,Ti,Tp;

uint a,b,c,d,e,f,g,h,k,m,n,o,q,r;

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

sbit sda=P2^0;                      //IIC端口定義

sbit scl=P2^1;

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

void delay(uint z)                  //延時(shí)1ms函數(shù)

{

uint x,y;

for(x=z;x>0;x--)

    for(y=110;y>0;y--);

}

/////////////////////////////////////////////以下LCD顯示

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

void write_com(uint com)    //寫指令函數(shù)                   

{

LCDRS=0;  //選擇對指令操作

P0=com;

LCDEN=1; //開使能

delay(5);

LCDEN=0;

}

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

void write_date(uint date)    //寫數(shù)據(jù)函數(shù)

{

LCDRS=1;

P0=date;

LCDEN=1;

delay(5);

LCDEN=0;

}

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

void clear()                 //清屏

{

write_com(0x01);

}

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

void initlcd()              //初始化函數(shù)

{

clear();

P0=0;

LCDEN=0;

LCDRW=0; //始終選擇寫操作

clear();

write_com(0x38); //兩行8位5*7點(diǎn)陣

write_com(0x06); //寫操作后畫面不動(dòng),AC自動(dòng)增一

write_com(0x0c); //開顯示,不顯示光標(biāo)

}

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

void logo()                 //開機(jī)logo

{

uchar i;

write_com(0x80+0X01);

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

{

write_date(DATE1[i]);

delay(20);

}

write_com(0x80+0x40);

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

{

write_date(DATE2[i]);

delay(20);

}

delay(2000);

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

clear();              //固定顯示部分

write_com(0x80);

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

{

write_date(DATE3[i]);

delay(1);

}

write_com(0x80+0X40);

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

{

write_date(DATE4[i]);

delay(1);

}

}

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

void display(double x,double y)

{

Tu=x;             //測量值和顯示函數(shù)轉(zhuǎn)換

Ti=y;

Tp=Tu*Ti;

TTU=Tu*100;

TTI=Ti*1000;

TTP=Tp*10;

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

U=TTU;                  //電壓顯示

a=U/10000;

b=U%10000/1000;

c=U%1000/100;

d=U%100/10; 

e=U%10/1;

write_com(0x80+0x02);

write_date(DATE5[a]);

write_date(DATE5[b]);

write_date(DATE5[c]);

write_date('.');

write_date(DATE5[d]);

write_date(DATE5[e]);

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

I=TTI;                   //電流顯示       

f=I/10000;

g=I%10000/1000;

h=I%1000/100;

k=I%100/10; 

m=I%10/1;

write_com(0x80+0x40+0x02);

write_date(DATE5[f]);

write_date(DATE5[g]);

write_date('.');

write_date(DATE5[h]);

write_date(DATE5[k]);

write_date(DATE5[m]);

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

PW=TTP;                         //功率顯示

n=PW/1000;

o=PW%1000/100;

q=PW%100/10;

r=PW%10/1;

 write_com(0x80+0x40+0x0b);

write_date(DATE5[n]);

write_date(DATE5[o]);

write_date(DATE5[q]);

write_date('.');

write_date(DATE5[r]);

}

//////////////////////////////////////////////////////////////////以下AD

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

void initad()                             //IIC初始化

{

scl=1;

delay(1);

sda=1;

delay(1);

}

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

void start()                              //IIC起始

{

sda=1;

delay(1);

scl=1;

delay(1);

sda=0;

delay(1);

}

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

void stop()                               //IIC終止

{

sda=0;

delay(1);

scl=1;

delay(1);

sda=1;

delay(1);

}

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

void respons()                        //從機(jī)應(yīng)答

{

scl=1;

delay(1);

while(sda==1);

delay(1);

scl=0;

delay(1);

}

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

void write(uchar date)                 //寫一個(gè)字節(jié)

{

uchar i,temp;

scl=0;

temp=date;

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

{

temp=temp<<1;

sda=CY;

delay(1);

scl=1;

delay(1);

scl=0;

delay(1);

}

}

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

uchar read()                       //讀一個(gè)字節(jié)

{

uchar i,k;

scl=0;

delay(1);

sda=1;

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

{

scl=1;

k=(k<<1)|sda;

delay(1);

scl=0;

delay(1);

}

return k;

}

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

void main()

{

double UT,IT;

uint uset;

double iset;

uset=120;

iset=1.5;

initlcd();

initad();

logo();

start();

write(0x90);     //在1001000地址寫

respons();

// write(0x40);     //設(shè)置AD為四通道不自動(dòng)增加通道模式               0100 0000

// write(0x44);     //設(shè)置AD為四通道自動(dòng)增加通道模式,AD3-U AD1-I     0100 0100

write(0x45);     //設(shè)置AD為四通道自動(dòng)增加通道模式,AD0-U AD2-I     0100 0101

// write(0x46);     //設(shè)置AD為四通道自動(dòng)增加通道模式,AD1-U AD3-I     0100 0110

// write(0x47);     //設(shè)置AD為四通道自動(dòng)增加通道模式,AD2-U AD0-I     0100 0111

respons();

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

while(1)

{

start();

write(0x91);

respons();

UT=read();

stop();

UT=UT*uset/255;

start();

write(0x91);

respons();

IT=read();

stop();

IT=IT*iset/255;

display(UT,IT);

}

}

0
回復(fù)
2014-06-11 09:05
@Deaby
第一步已實(shí)現(xiàn):[圖片][圖片][圖片]代碼如下:/*********************************************/#include#defineuintunsignedint#defineucharunsignedchar/********************************************/ucharcodeDATE1[]="WELCOMTOBOE";  //LCD顯示相關(guān)參數(shù)定義ucharcodeDATE2[]="VIPTESTSYSTEM!";ucharcodeDATE3[]="U=000.00V_P(W)";ucharcodeDATE4[]="I=00.000A_000.0";ucharcodeDATE5[]={      //1602LCD0~9編碼0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39};sbitLCDRS=P2^4;sbitLCDRW=P2^5;sbitLCDEN=P2^6;unsignedlongU,I,PW,TTU,TTI,TTP;doubleTu,Ti,Tp;uinta,b,c,d,e,f,g,h,k,m,n,o,q,r;/**********************************************/sbitsda=P2^0;           //IIC端口定義sbitscl=P2^1;/**********************************************/voiddelay(uintz)         //延時(shí)1ms函數(shù){uintx,y;for(x=z;x>0;x--)    for(y=110;y>0;y--);}/////////////////////////////////////////////以下LCD顯示/**********************************************/voidwrite_com(uintcom)  //寫指令函數(shù)          {LCDRS=0; //選擇對指令操作P0=com;LCDEN=1;//開使能delay(5);LCDEN=0;}/***********************************************/voidwrite_date(uintdate)  //寫數(shù)據(jù)函數(shù){LCDRS=1;P0=date;LCDEN=1;delay(5);LCDEN=0;}/***********************************************/voidclear()        //清屏{write_com(0x01);}/***********************************************/voidinitlcd()       //初始化函數(shù){clear();P0=0;LCDEN=0;LCDRW=0;//始終選擇寫操作clear();write_com(0x38);//兩行8位5*7點(diǎn)陣write_com(0x06);//寫操作后畫面不動(dòng),AC自動(dòng)增一write_com(0x0c);//開顯示,不顯示光標(biāo)}/***********************************************/voidlogo()        //開機(jī)logo{uchari;write_com(0x80+0X01);for(i=0;i
此貼已被例如本屆原創(chuàng)帖大賽參賽作品,樓主加油,期待更多內(nèi)容~!嘎嘎
0
回復(fù)
飛翔2004
LV.10
4
2014-06-11 21:39
@Deaby
第一步已實(shí)現(xiàn):[圖片][圖片][圖片]代碼如下:/*********************************************/#include#defineuintunsignedint#defineucharunsignedchar/********************************************/ucharcodeDATE1[]="WELCOMTOBOE";  //LCD顯示相關(guān)參數(shù)定義ucharcodeDATE2[]="VIPTESTSYSTEM!";ucharcodeDATE3[]="U=000.00V_P(W)";ucharcodeDATE4[]="I=00.000A_000.0";ucharcodeDATE5[]={      //1602LCD0~9編碼0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39};sbitLCDRS=P2^4;sbitLCDRW=P2^5;sbitLCDEN=P2^6;unsignedlongU,I,PW,TTU,TTI,TTP;doubleTu,Ti,Tp;uinta,b,c,d,e,f,g,h,k,m,n,o,q,r;/**********************************************/sbitsda=P2^0;           //IIC端口定義sbitscl=P2^1;/**********************************************/voiddelay(uintz)         //延時(shí)1ms函數(shù){uintx,y;for(x=z;x>0;x--)    for(y=110;y>0;y--);}/////////////////////////////////////////////以下LCD顯示/**********************************************/voidwrite_com(uintcom)  //寫指令函數(shù)          {LCDRS=0; //選擇對指令操作P0=com;LCDEN=1;//開使能delay(5);LCDEN=0;}/***********************************************/voidwrite_date(uintdate)  //寫數(shù)據(jù)函數(shù){LCDRS=1;P0=date;LCDEN=1;delay(5);LCDEN=0;}/***********************************************/voidclear()        //清屏{write_com(0x01);}/***********************************************/voidinitlcd()       //初始化函數(shù){clear();P0=0;LCDEN=0;LCDRW=0;//始終選擇寫操作clear();write_com(0x38);//兩行8位5*7點(diǎn)陣write_com(0x06);//寫操作后畫面不動(dòng),AC自動(dòng)增一write_com(0x0c);//開顯示,不顯示光標(biāo)}/***********************************************/voidlogo()        //開機(jī)logo{uchari;write_com(0x80+0X01);for(i=0;i
支持一下樓主,為何樓主不采用單片機(jī)內(nèi)部的AD轉(zhuǎn)換?此案中單片機(jī)的精度不夠?
0
回復(fù)
Deaby
LV.3
5
2014-06-11 21:50
@飛翔2004
支持一下樓主,為何樓主不采用單片機(jī)內(nèi)部的AD轉(zhuǎn)換?此案中單片機(jī)的精度不夠?
我是利用手頭一塊開發(fā)板邊學(xué)邊做的,這塊板子上只有stc的51單片機(jī),不帶AD的,上面使用的是NXP的PCF8591.就先用這個(gè)做了,目前不要求精度和性能,能實(shí)現(xiàn)功能就很滿意了,等了解差不多了準(zhǔn)備入手寫高級點(diǎn)的單片機(jī)
0
回復(fù)
飛翔2004
LV.10
6
2014-06-11 21:56
@Deaby
我是利用手頭一塊開發(fā)板邊學(xué)邊做的,這塊板子上只有stc的51單片機(jī),不帶AD的,上面使用的是NXP的PCF8591.就先用這個(gè)做了,目前不要求精度和性能,能實(shí)現(xiàn)功能就很滿意了,等了解差不多了準(zhǔn)備入手寫高級點(diǎn)的單片機(jī)
我剛還在想怎么不用單片機(jī)自帶的AD轉(zhuǎn)換,那樣更簡潔,STC沒用過,我覺得現(xiàn)在的單片機(jī)很多都有吧,我大多用AVR的都有自帶AD轉(zhuǎn)換。。。祝你成功,加油發(fā)帖哦,時(shí)間不多了。
0
回復(fù)
Deaby
LV.3
7
2014-06-11 22:03
@飛翔2004
我剛還在想怎么不用單片機(jī)自帶的AD轉(zhuǎn)換,那樣更簡潔,STC沒用過,我覺得現(xiàn)在的單片機(jī)很多都有吧,我大多用AVR的都有自帶AD轉(zhuǎn)換。。。祝你成功,加油發(fā)帖哦,時(shí)間不多了。
謝謝,還需前輩多指教呢,計(jì)劃兩個(gè)月內(nèi)能把計(jì)劃中的事做完就可以了,我剛剛學(xué)還不熟,慢慢來了~~
0
回復(fù)
jenny01
LV.2
8
2014-06-12 11:08
@Deaby
謝謝,還需前輩多指教呢,計(jì)劃兩個(gè)月內(nèi)能把計(jì)劃中的事做完就可以了,我剛剛學(xué)還不熟,慢慢來了~~
不錯(cuò)啊,推薦給剛學(xué)單片機(jī)的弟弟
0
回復(fù)
Deaby
LV.3
9
2014-06-12 12:31
@jenny01
不錯(cuò)啊,推薦給剛學(xué)單片機(jī)的弟弟
謝謝捧場!
0
回復(fù)
2014-06-16 15:48
@Deaby
[圖片]謝謝捧場!
不錯(cuò)啊
0
回復(fù)
Deaby
LV.3
11
2014-06-16 17:08
@挑戰(zhàn)者
不錯(cuò)啊
謝謝鼓勵(lì)~~
0
回復(fù)
小毛猴
LV.3
12
2014-06-17 14:21
@Deaby
謝謝,還需前輩多指教呢,計(jì)劃兩個(gè)月內(nèi)能把計(jì)劃中的事做完就可以了,我剛剛學(xué)還不熟,慢慢來了~~
樓主 期待更新啊,看完了 沒的看了~~
0
回復(fù)
wangshujun
LV.8
13
2014-07-07 17:43
@Deaby
第一步已實(shí)現(xiàn):[圖片][圖片][圖片]代碼如下:/*********************************************/#include#defineuintunsignedint#defineucharunsignedchar/********************************************/ucharcodeDATE1[]="WELCOMTOBOE";  //LCD顯示相關(guān)參數(shù)定義ucharcodeDATE2[]="VIPTESTSYSTEM!";ucharcodeDATE3[]="U=000.00V_P(W)";ucharcodeDATE4[]="I=00.000A_000.0";ucharcodeDATE5[]={      //1602LCD0~9編碼0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39};sbitLCDRS=P2^4;sbitLCDRW=P2^5;sbitLCDEN=P2^6;unsignedlongU,I,PW,TTU,TTI,TTP;doubleTu,Ti,Tp;uinta,b,c,d,e,f,g,h,k,m,n,o,q,r;/**********************************************/sbitsda=P2^0;           //IIC端口定義sbitscl=P2^1;/**********************************************/voiddelay(uintz)         //延時(shí)1ms函數(shù){uintx,y;for(x=z;x>0;x--)    for(y=110;y>0;y--);}/////////////////////////////////////////////以下LCD顯示/**********************************************/voidwrite_com(uintcom)  //寫指令函數(shù)          {LCDRS=0; //選擇對指令操作P0=com;LCDEN=1;//開使能delay(5);LCDEN=0;}/***********************************************/voidwrite_date(uintdate)  //寫數(shù)據(jù)函數(shù){LCDRS=1;P0=date;LCDEN=1;delay(5);LCDEN=0;}/***********************************************/voidclear()        //清屏{write_com(0x01);}/***********************************************/voidinitlcd()       //初始化函數(shù){clear();P0=0;LCDEN=0;LCDRW=0;//始終選擇寫操作clear();write_com(0x38);//兩行8位5*7點(diǎn)陣write_com(0x06);//寫操作后畫面不動(dòng),AC自動(dòng)增一write_com(0x0c);//開顯示,不顯示光標(biāo)}/***********************************************/voidlogo()        //開機(jī)logo{uchari;write_com(0x80+0X01);for(i=0;i
這個(gè)ad才8位呀,精度有點(diǎn)低了,反正串行的片子個(gè)位數(shù)比較高的吧
0
回復(fù)
發(fā)
主站蜘蛛池模板: 日韩精品无码一区二区中文字幕 | 精品久久久久久久久久ntr影视 | 深夜福利免费 | 中文字幕第9页 | 免费观看又色又爽又黄的校园 | 新久久久| 亚洲国产精品无码一区二区三区 | 亚洲日本成本人观看 | 亚洲国产精品久久久久 | 91九色丨porny丨交换 | av最新天| 黄色录像a级片 | 亚洲成av人不卡无码影片 | 2019天天干天天操 | 1769中文字幕岛国 | 四虎地址| 欧美老妇视频热 | 久久国产精品综合 | 日本不卡免费一区二区三区综合久久 | 成人一区二区三区久久精品嫩草 | 国产精品人妻无码久久久郑州天气网 | 大地资源免费更新在线播放 | 黑人巨大两根一起挤进 | 亚洲欧美另类一区 | 中文无字幕文字 | 日韩欧美大片在线观看 | 亚洲综合色视频 | jvid视频在线观看免费 | 在线观看免费一区 | 一区二区三区国产免费 | 久久影院一区 | 精品一区二区三区四区 | 色哟哟网站入口在线观看 | 日韩欧美福利 | 黑人把女人弄到高潮a片 | 亚洲一区三区三区 | 无码骚夜夜精品 | 绿帽在线| 久久香蕉三级国产黑人 | 久久精品一二 | 超碰人人擦 |