性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

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

菜鳥也來做數(shù)控電源

剛開始學(xué)習(xí)51單片機(jī),有點(diǎn)像別人都開著飛機(jī),而我還在學(xué)習(xí)騎自行車,呵呵;不過也沒辦法啊,

使用的是51單片機(jī)和0832的DAC兩個,一個控制輸出電壓,一個控制輸出電流,來實(shí)現(xiàn)橫流恒壓;

當(dāng)然是開環(huán)控制,精度不是很高,沒辦法啊,小白就這個水平;

上圖,這也是我調(diào)試了2天的結(jié)果啊

 

無標(biāo)題

無標(biāo)題1

 

 

1602的顯示程序,也是寫的我要死要活的,

采用了五個按鍵,

一個功能選擇(電流電壓設(shè)定切換)

一個調(diào)零

一個最大

一個加

一個減

后面四個按鍵是公用的,剛好把51單片機(jī)端口用完,還想加兩個ADC采樣修正輸出電壓和電流,沒端口了;

 

全部回復(fù)(12)
正序查看
倒序查看
2015-05-06 09:21
把學(xué)習(xí)和調(diào)試的過程發(fā)上來,加油~
0
回復(fù)
2015-05-06 09:32
已經(jīng)被添加到社區(qū)經(jīng)典圖庫嘍
http://www.e-ticket.cn/bbs/classic/
0
回復(fù)
2015-05-06 11:29
@電源網(wǎng)-fqd
已經(jīng)被添加到社區(qū)經(jīng)典圖庫嘍http://www.e-ticket.cn/bbs/classic/

#include

#include

#include

#define uint unsigned int  //預(yù)定義一下

#define uchar unsigned char sbit rs=P2^3;    //1602的數(shù)據(jù)/指令選擇控制線

sbit wr=P2^4;  

sbit en=P2^5;

sbit dacv=P2^6;

sbit key1 = P2^0;

sbit key2= P2^1;

sbit key3 = P2^2;

sbit key4 = P2^7;      

sbit cs1 = P3^2;

sbit wr1 = P3^3;

sbit daci=P3^0;

sbit cs2=P3^4;

sbit wr2=P3^5;

sbit xuan=P3^1;

uchar code table[]="V and I Value";

float val,val1;                   

tablel  void delay(uint n)       //延時函數(shù)                       

{     uint x,y;       for(x=n;x>0;x--)          for(y=110;y>0;y--);} 

void lcd_wcom(uchar com)  //1602寫命令函數(shù)                 

{     rs=0;            //選擇指令寄存器        

P1=com;            //把命令字送入P2    

delay(5);            //延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)     

en=1;  delay(5);           //使能線電平變化,命令送入1602的8位數(shù)據(jù)口      

 en=0; } 

void lcd_wdat(uchar dat)        //1602寫數(shù)據(jù)函數(shù)      

 {     rs=1;        //選擇數(shù)據(jù)寄存器        

 P1=dat;        //把要顯示的數(shù)據(jù)送入P2    

delay(5);        //延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)     

 en=1;

 delay(5);       //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口   

  en=0;} 

void lcd_init()              //1602初始化函數(shù)       

{     wr=0;    en=0;    lcd_wcom(0x38);       //8位數(shù)據(jù),雙列,5*7字形           

 lcd_wcom(0x0f);      //開啟顯示屏,關(guān)光標(biāo),光標(biāo)不閃爍    

 lcd_wcom(0x0c);    //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位     

 lcd_wcom(0x01);    //清屏 

 

void displayv(uchar k1,k2,k3,k4)   //顯示子函數(shù)

{lcd_wcom(0x80+0x40);lcd_wdat('T');lcd_wcom(0x80+0x41);lcd_wdat('h');lcd_wcom(0x80+0x42);lcd_wdat('e');lcd_wcom(0x80+0x43);lcd_wdat('V');lcd_wcom(0x80+0x44);lcd_wdat('i');lcd_wcom(0x80+0x45);lcd_wdat('s');lcd_wcom(0x80+0x46);lcd_wdat(':');lcd_wcom(0x80+0x47);lcd_wdat(0x30+k1);lcd_wcom(0x80+0x48);lcd_wdat(0x30+k2);lcd_wcom(0x80+0x49);lcd_wdat('.');lcd_wcom(0x80+0x4A);lcd_wdat(0x30+k3);lcd_wcom(0x80+0x4B);lcd_wdat(0x30+k4);lcd_wcom(0x80+0x4C);lcd_wdat('V');}

 

void displayi(uchar f1,f2,f3,f4)   //顯示子函數(shù)

{lcd_wcom(0x80+0x40);lcd_wdat('T');lcd_wcom(0x80+0x41);lcd_wdat('h');lcd_wcom(0x80+0x42);lcd_wdat('e');lcd_wcom(0x80+0x43);lcd_wdat('I');lcd_wcom(0x80+0x44);lcd_wdat('i');lcd_wcom(0x80+0x45);lcd_wdat('s');lcd_wcom(0x80+0x46);lcd_wdat(':');lcd_wcom(0x80+0x47);lcd_wdat(0x30+f1);lcd_wcom(0x80+0x48);lcd_wdat('.');lcd_wcom(0x80+0x49);lcd_wdat(0x30+f2);lcd_wcom(0x80+0x4A);lcd_wdat(0x30+f3);lcd_wcom(0x80+0x4B);lcd_wdat(0x30+f4);lcd_wcom(0x80+0x4C);lcd_wdat('A');}

void dianya()

{uint k1,k2,k3,k4,a; cs1=0; wr1=0; { dacv=1; P0=val;  if(key1== 0)   {val=0; P0 = val;delay(20);} if(key2 == 0) {  val++;  delay(50);   if(val==255)  val=0;  P0 = val;delay(20);  } if(key3 == 0)   {   val--;   delay(50); if(val==0)   val=255;P0=val;delay(20);} if(key4 == 0) {val = 255;P0=val;delay(20);}         dacv=0;  a=((float)val*30.0/255.0)*100.0;  k1=(int)a/1000;   k2=(int)a%1000/100;  k3=(int)a%100/10;  k4=(int)a%10;    displayv( k1,k2,k3,k4);    cs2=1;wr2=1;    }    }

void dianliu()

{uint f1,f2,f3,f4,f; cs2=0; wr2=0; {  daci=1;    P0=val1;  if(key1== 0)   {val1=0; P0 = val1;delay(20);} if(key2 == 0) {  val1++;  delay(50);   if(val1==255)  val1=0;  P0 = val1;delay(20);  } if(key3 == 0)   {   val1--;   delay(20); if(val1==0)   val1=255;P0=val1;delay(20);} if(key4 == 0) {val1 = 255;P0=val1;delay(30);}        

 daci=0;

  f=((float)val1*30.0/255.0)*100.0; 

 f1=(int)f/1000;  

 f2=(int)f%1000/100; 

 f3=(int)f%100/10;  

f4=(int)f%10;   

displayi( f1,f2,f3,f4);   

 cs1=1;wr1=1;  

  } 

   }

 

void main()            //主函數(shù)

 {        uchar m=0; bit flag; 

P0=0x00; dacv=0; daci=0;  flag=1;   

 lcd_init(); lcd_wcom(0x80);        //顯示地址設(shè)為80H(即00H,)上排第一位            

for(m=0;m<14;m++)     //將table[]中的數(shù)據(jù)依次寫入1602顯示     

 {            

lcd_wdat(table[m]);                         

 delay(5);      }                        

 while(1) 

{

 if(xuan==0) 

{

 while(!xuan); flag=~flag; }

  if(flag==1) {dianya();}

 if(flag==0) {dianliu();} 

}  }

0
回復(fù)
2015-05-07 21:01
@wangbo0227
#include#include#include#defineuintunsignedint //預(yù)定義一下#defineucharunsignedchar sbitrs=P2^3;   //1602的數(shù)據(jù)/指令選擇控制線sbitwr=P2^4;  sbiten=P2^5;sbitdacv=P2^6;sbitkey1=P2^0;sbitkey2=P2^1;sbitkey3=P2^2;sbitkey4=P2^7;      sbitcs1=P3^2;sbitwr1=P3^3;sbitdaci=P3^0;sbitcs2=P3^4;sbitwr2=P3^5;sbitxuan=P3^1;ucharcodetable[]="VandIValue";floatval,val1;                   tablel  voiddelay(uintn)      //延時函數(shù)                       {    uintx,y;       for(x=n;x>0;x--)         for(y=110;y>0;y--);} voidlcd_wcom(ucharcom) //1602寫命令函數(shù)                 {    rs=0;           //選擇指令寄存器        P1=com;           //把命令字送入P2    delay(5);           //延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)     en=1; delay(5);          //使能線電平變化,命令送入1602的8位數(shù)據(jù)口       en=0; } voidlcd_wdat(uchardat)       //1602寫數(shù)據(jù)函數(shù)       {    rs=1;       //選擇數(shù)據(jù)寄存器         P1=dat;       //把要顯示的數(shù)據(jù)送入P2    delay(5);       //延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)      en=1; delay(5);      //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口    en=0;} voidlcd_init()             //1602初始化函數(shù)       {    wr=0;   en=0;   lcd_wcom(0x38);      //8位數(shù)據(jù),雙列,5*7字形            lcd_wcom(0x0f);     //開啟顯示屏,關(guān)光標(biāo),光標(biāo)不閃爍     lcd_wcom(0x0c);   //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位      lcd_wcom(0x01);   //清屏 }  voiddisplayv(uchark1,k2,k3,k4)  //顯示子函數(shù){lcd_wcom(0x80+0x40);lcd_wdat('T');lcd_wcom(0x80+0x41);lcd_wdat('h');lcd_wcom(0x80+0x42);lcd_wdat('e');lcd_wcom(0x80+0x43);lcd_wdat('V');lcd_wcom(0x80+0x44);lcd_wdat('i');lcd_wcom(0x80+0x45);lcd_wdat('s');lcd_wcom(0x80+0x46);lcd_wdat(':');lcd_wcom(0x80+0x47);lcd_wdat(0x30+k1);lcd_wcom(0x80+0x48);lcd_wdat(0x30+k2);lcd_wcom(0x80+0x49);lcd_wdat('.');lcd_wcom(0x80+0x4A);lcd_wdat(0x30+k3);lcd_wcom(0x80+0x4B);lcd_wdat(0x30+k4);lcd_wcom(0x80+0x4C);lcd_wdat('V');} voiddisplayi(ucharf1,f2,f3,f4)  //顯示子函數(shù){lcd_wcom(0x80+0x40);lcd_wdat('T');lcd_wcom(0x80+0x41);lcd_wdat('h');lcd_wcom(0x80+0x42);lcd_wdat('e');lcd_wcom(0x80+0x43);lcd_wdat('I');lcd_wcom(0x80+0x44);lcd_wdat('i');lcd_wcom(0x80+0x45);lcd_wdat('s');lcd_wcom(0x80+0x46);lcd_wdat(':');lcd_wcom(0x80+0x47);lcd_wdat(0x30+f1);lcd_wcom(0x80+0x48);lcd_wdat('.');lcd_wcom(0x80+0x49);lcd_wdat(0x30+f2);lcd_wcom(0x80+0x4A);lcd_wdat(0x30+f3);lcd_wcom(0x80+0x4B);lcd_wdat(0x30+f4);lcd_wcom(0x80+0x4C);lcd_wdat('A');}voiddianya(){uintk1,k2,k3,k4,a; cs1=0; wr1=0; { dacv=1; P0=val;  if(key1==0)  {val=0;P0=val;delay(20);} if(key2==0) {  val++;  delay(50);   if(val==255)  val=0;  P0=val;delay(20);  } if(key3==0)  {  val--;  delay(50); if(val==0)  val=255;P0=val;delay(20);} if(key4==0) {val=255;P0=val;delay(20);}       dacv=0;  a=((float)val*30.0/255.0)*100.0;  k1=(int)a/1000;   k2=(int)a%1000/100;  k3=(int)a%100/10;  k4=(int)a%10;   displayv(k1,k2,k3,k4);   cs2=1;wr2=1;    }    }voiddianliu(){uintf1,f2,f3,f4,f; cs2=0; wr2=0; { daci=1;   P0=val1;  if(key1==0)  {val1=0;P0=val1;delay(20);} if(key2==0) {  val1++;  delay(50);   if(val1==255)  val1=0;  P0=val1;delay(20);  } if(key3==0)  {  val1--;  delay(20); if(val1==0)  val1=255;P0=val1;delay(20);} if(key4==0) {val1=255;P0=val1;delay(30);}        daci=0;  f=((float)val1*30.0/255.0)*100.0;  f1=(int)f/1000;   f2=(int)f%1000/100;  f3=(int)f%100/10;  f4=(int)f%10;   displayi(f1,f2,f3,f4);    cs1=1;wr1=1;    }    } voidmain()           //主函數(shù) {       ucharm=0; bitflag; P0=0x00; dacv=0; daci=0;  flag=1;    lcd_init(); lcd_wcom(0x80);       //顯示地址設(shè)為80H(即00H,)上排第一位            for(m=0;m
經(jīng)過改進(jìn)已經(jīng)使用了16位DAC來轉(zhuǎn)換電壓,使用了SPI通訊節(jié)省了IO口,現(xiàn)在很想比數(shù)字鍵盤加進(jìn)去,這樣子這個電源就趨勢與完美了,可是苦于不會寫鍵盤程序,
0
回復(fù)
2015-05-08 15:32
@wangbo0227
經(jīng)過改進(jìn)已經(jīng)使用了16位DAC來轉(zhuǎn)換電壓,使用了SPI通訊節(jié)省了IO口,現(xiàn)在很想比數(shù)字鍵盤加進(jìn)去,這樣子這個電源就趨勢與完美了,可是苦于不會寫鍵盤程序,

 

鍵盤做出來了,可是程序怎么都寫不好,哪位大神幫忙寫一個啊 ;;

0
回復(fù)
2015-05-11 09:16
@wangbo0227
[圖片] 鍵盤做出來了,可是程序怎么都寫不好,哪位大神幫忙寫一個啊;;

鍵盤和顯示程序都可以正常運(yùn)行了,使用了16位的ADC和DAC,程序?qū)懥?00多行,現(xiàn)在覺得寫程序的人太不容易了;

0
回復(fù)
2015-05-30 14:58
@wangbo0227
[圖片]鍵盤和顯示程序都可以正常運(yùn)行了,使用了16位的ADC和DAC,程序?qū)懥?00多行,現(xiàn)在覺得寫程序的人太不容易了;

能不能把電路圖和圖貼出來看一下。。。。

0
回復(fù)
2015-06-01 08:36
@yangkuan6621
能不能把電路圖和圖貼出來看一下。。。。

52-4.pdf

上傳的附件是電路圖,里面的ADC是公用的,兩個DAC電路屬于開環(huán)電路;

0
回復(fù)
178064035
LV.4
10
2015-06-18 08:00
@wangbo0227
52-4.pdf上傳的附件是電路圖,里面的ADC是公用的,兩個DAC電路屬于開環(huán)電路;

顯示子函數(shù)如指針方便點(diǎn)。

void lcd1602_write_char_string(uchar y,uchar *s)

{   

    uchar i = 0; 

   while(*s)   

{      

LCD_disp_char(i,y,*s);

s++; //地址加1    i++;   

}

 

lcd1602_write_char_string(顯示在哪一行,"要顯示的字符串");

 

0
回復(fù)
wangbo0227
LV.8
11
2015-06-18 21:52
@178064035
顯示子函數(shù)如指針方便點(diǎn)。voidlcd1602_write_char_string(uchary,uchar*s){       uchari=0;   while(*s)   {     LCD_disp_char(i,y,*s);s++; //地址加1   i++;   }}  lcd1602_write_char_string(顯示在哪一行,"要顯示的字符串"); 

謝謝指點(diǎn),明天更新程序試一下。,終于有人看了。。。

*s是什么意思啊

0
回復(fù)
2015-06-24 14:47
@wangbo0227
謝謝指點(diǎn),明天更新程序試一下。,終于有人看了。。。*s是什么意思啊

 指針定義

0
回復(fù)
Rachelmi
LV.9
13
2015-08-11 17:28
@影動隨意
 指針定義
搜嘎~
0
回復(fù)
發(fā)