久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7735|回復: 6
打印 上一主題 下一主題
收起左側(cè)

單片機電冰箱控制系統(tǒng)PCB原理圖+源程序設計

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:587615 發(fā)表于 2019-7-21 10:48 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
前期是用51單片機做的,后面會更新32制作圖
Altium Designer畫的電路原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <reg52.h>
  4. #include <string.h>

  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. uchar code table[];
  8. uint    door;
  9. uchar   fushu;
  10. uchar   fushu1;
  11. uint    temp;
  12. uchar   ys;
  13. uchar   yskey=20;
  14. uint    n=0;

  15. sbit    RS =P2^4;
  16. sbit    WRD=P2^5;
  17. sbit    E=  P2^6;
  18. sbit    PSB=P2^1;
  19. sbit    RES=P2^3;
  20. sbit    DQ=P1^7;//ds18b20 端口
  21. sbit    ysj_0=P1^1;
  22. //sbit    ysj_1=P3^4;                 
  23. //sbit    ysj_2=P3^5;                                 
  24. //sbit    ysj_3=P3^6;        //控制繼電器
  25. sbit    KEY_1 = P3^3; //上
  26. sbit    KEY_2 = P3^1; //下
  27. sbit    KEY_3 = P3^2; //
  28. sbit    KEY_4 = P1^2; // 模擬電壓是否正常


  29. void    lcd_w_gzztpd(void);
  30. void    lcd_w_menkg(void);
  31. void    LCD_w_wd(uchar add2,int wwd,uchar fs);
  32. void    TransferData(char data1,bit DI);
  33. void    delayms(uint n);
  34. void    delay(uint m);
  35. void    lcd_mesg(uchar code *adder1);
  36. void    lcd_mesg2(uchar add,uchar code *adder2);
  37. void    lcd_w_hz(char address,char *hanzi);
  38. uint    ReadTemperature(void);
  39. void    Init_DS18B20(void);
  40. uchar   ReadOneChar(void);
  41. void    WriteOneChar(unsigned char dat);
  42. void    delayds(unsigned int i);
  43. uchar   key(void);
  44. void    soft_reset(void);
  45. void    znkzysj(void);

  46. uchar code table[]={
  47. "賀州學院"
  48. "--李——袁——陀--"
  49. "機電——設計——通信"
  50. "  電冰箱智能控制  "
  51. };
  52. uchar code table1[]={
  53. "預設:        ℃"
  54. "                "
  55. "當前:        ℃"
  56. "工作狀態(tài):      "
  57. };

  58. uchar code men[]={"----門已打開----"};
  59. uchar code men1[]={"----門已關閉----"};
  60. uchar code gzzt0[]={"--電冰箱工作中--"};
  61. uchar code gzzt1[]={"--電冰箱未工作--"};
  62. uchar code gzzt2[]={
  63. "制冷片工作ON or OFF"
  64. "電壓是否正常!  "
  65. "正常,請檢查電源"
  66. "然后重啟電冰箱!"
  67. };
  68. /*********************************************************************************/
  69. void     initinal(void)           //LCD字庫初始化程序
  70.           {
  71.            delay(40);             //大于40MS的延時程序
  72.            PSB=1;                 //設置為8BIT并口工作模式
  73.            delay(1);              //延時
  74.            RES=0;                 //復位
  75.            delay(1);              //延時
  76.            RES=1;                 //復位置高
  77.            delay(10);
  78.            TransferData(0x30,0);  //Extended Function Set :8BIT設置,RE=0: basic instruction set, G=0 :graphic display OFF
  79.            delay(100);            //大于100uS的延時程序
  80.            TransferData(0x30,0);  //Function Set
  81.            delay(37);             ////大于37uS的延時程序
  82.            TransferData(0x08,0);  //Display on Control
  83.            delay(100);            //大于100uS的延時程序
  84.            TransferData(0x10,0);  //Cursor Display Control光標設置
  85.            delay(100);            //大于100uS的延時程序
  86.            TransferData(0x0C,0);  //Display Control,D=1,顯示開
  87.            delay(100);            //大于100uS的延時程序
  88.            TransferData(0x01,0);  //Display Clear
  89.            delay(10);             //大于10mS的延時程序
  90.            TransferData(0x06,0);  //Enry Mode Set,光標從右向左加1位移動
  91.            delay(100);            //大于100uS的延時程序
  92.                    delay(100);  //大于100uS的延時程序
  93.                    lcd_mesg(table); //顯示中文漢字
  94.                    delayms(50);
  95.                lcd_mesg(table1);
  96.           }

  97. /******************************************************************************/
  98. void    main(void)
  99.      {
  100.         initinal(); //調(diào)用LCD字庫初始化程序
  101.                         /* 定時、中斷初始化 */
  102.             TMOD = 0x10;    // T1使用定時模式,工作模式1,無門控位
  103.             TH1 = 0x15;    // 為T1填入初值,定時時間50ms
  104.                 TL1 = 0xA0;
  105.                 ET1 = 1;    // 允許定時器1中斷
  106.                 EA = 1;    // CPU開放中斷
  107.                  while(1)
  108.             {
  109.                   temp=ReadTemperature();
  110.                LCD_w_wd(0x93,temp,fushu);
  111.                   ys=key();
  112.               if(ys>=20){fushu1=0;ys=ys-20;}
  113.                   else {fushu1=1;ys=20-ys;}
  114.                   znkzysj();
  115.           ys=ys*10;LCD_w_wd(0x83,ys,fushu1);
  116.           lcd_w_menkg();
  117.           //delayms(50);
  118.                   lcd_w_gzztpd();
  119.                   delayms(50);
  120.           //delayms(240);

  121.         }
  122.       }

  123. /*************************以下是12864的代碼***********************************/
  124. void   lcd_mesg(uchar code *adder1)
  125. {
  126.         uchar i;
  127.         TransferData(0x80,0);  //Set Graphic Display RAM Address
  128.         delay(100);
  129.         for(i=0;i<32;i++)
  130.                 {
  131.                           TransferData(*adder1,1);
  132.                            adder1++;
  133.                 }

  134.         TransferData(0x90,0);  //Set Graphic Display RAM Address
  135.         delay(100);
  136.         for(i=32;i<64;i++)
  137.                 {
  138.                           TransferData(*adder1,1);
  139.                            adder1++;
  140.                 }
  141. }

  142. void   lcd_mesg2(uchar add,uchar code *adder2)
  143. {        uchar i;
  144.         TransferData(add,0);  //Set Graphic Display RAM Address

  145.         delay(100);
  146.         for(i=0;i<16;i++)
  147.                 {
  148.                           TransferData(*adder2,1);
  149.                            adder2++;
  150.                 }
  151. }
  152. /******************************************************************************/
  153. //溫度顯示處理并送入LCD的指定區(qū)域
  154. void LCD_w_wd(uchar add2,int wwd,uchar fs)
  155. {uchar te1,te2,te3;
  156.   te1=wwd/100+48;te2=(wwd/10)%10+48;te3=wwd%10+48;if(te1==48)te1=0x20;
  157.         TransferData(add2,0);
  158.         if(fs)TransferData(0x2d,1);       
  159.         else TransferData(0x20,1);
  160.         TransferData(te1,1);
  161.         TransferData(te2,1);
  162.         TransferData(0x2e,1);
  163.         TransferData(te3,1);
  164. }

  165. /******************************************************************************/
  166. void    TransferData(char data1,bit DI)  //傳送數(shù)據(jù)或者命令,當DI=0是,傳送命令,當DI=1,傳送數(shù)據(jù).
  167.           {
  168.             WRD=0;
  169.             RS=DI;
  170.             delay(1);
  171.             P0=data1;
  172.             E=1;
  173.             delay(1);
  174.             E=0;
  175.            }
  176. /******************************************************************************/
  177. void    delayms(uint n)            //延時10×n毫秒程序
  178.                    {
  179.                       uint i,j;
  180.                       for(i=0;i<n;i++)
  181.                          for(j=0;j<2000;j++);
  182.                    }

  183. void    delay(uint m)            //延時程序
  184.                    {
  185.                       uint i,j;
  186.                       for(i=0;i<m;i++)
  187.                          for(j=0;j<10;j++);
  188.                    }

  189. void delayds(unsigned int i)//延時函數(shù)
  190. {
  191. while(i--);
  192. }
  193. /******************************************************************************/

  194. //關門與否顯示處理
  195. void lcd_w_menkg(void)
  196. {  
  197.     if(door==1) {lcd_mesg2(0x88,men);};
  198.         if(door==0) {lcd_mesg2(0x88,men1);};
  199. }
  200. /******************************************************************************/
  201. //工作狀態(tài)判斷
  202. void lcd_w_gzztpd(void)
  203. {   
  204.     if(KEY_4==1&&ysj_0==1) lcd_mesg2(0x98,gzzt0);
  205.         if(KEY_4==1&&ysj_0==0) lcd_mesg2(0x98,gzzt1);
  206.         if(KEY_4==0)
  207.         {ysj_0=0;TR1=0; lcd_mesg(gzzt2);
  208.         while(KEY_4==0);
  209.         soft_reset();}
  210.                                
  211. }
  212. /***********************以上是12864的代碼**************************************/
  213. /*********************以下是DS18B20 的代碼************************************/
  214. //18b20初始化函數(shù)
  215. void Init_DS18B20(void)
  216. {
  217. unsigned char x=0;
  218. DQ = 1;    //DQ復位
  219. delayds(8);  //稍做延時
  220. DQ = 0;    //單片機將DQ拉低
  221. delayds(80); //精確延時 大于 480us
  222. DQ = 1;    //拉高總線
  223. delayds(10);
  224. x=DQ;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  225. delayds(5);
  226. }

  227. //讀一個字節(jié)
  228. unsigned char ReadOneChar(void)
  229. {
  230. unsigned char i=0;
  231. unsigned char dat = 0;
  232. for (i=8;i>0;i--)
  233. {
  234.   DQ = 0; // 給脈沖信號
  235.   dat>>=1;
  236.   DQ = 1; // 給脈沖信號
  237.   if(DQ)
  238.    dat|=0x80;
  239.   delayds(5);
  240. }
  241. return(dat);
  242. }

  243. //寫一個字節(jié)
  244. void WriteOneChar(unsigned char dat)
  245. {
  246. unsigned char i=0;
  247. for (i=8; i>0; i--)
  248. {
  249.   DQ = 0;
  250.   DQ = dat&0x01;
  251.   delayds(5);
  252.   DQ = 1;
  253.   dat>>=1;
  254. }
  255. delayds(5);
  256. }

  257. //讀取溫度
  258. unsigned int ReadTemperature(void)
  259. {
  260. unsigned char a=0;
  261. unsigned char b=0;
  262. unsigned int t=0;
  263. float tt=0;
  264. Init_DS18B20();
  265. WriteOneChar(0xCC); // 跳過讀序號列號的操作
  266. WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換
  267. delayds(200);
  268. Init_DS18B20();
  269. WriteOneChar(0xCC); //跳過讀序號列號的操作
  270. WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
  271. a=ReadOneChar();
  272. b=ReadOneChar();
  273. if(b&0x80)
  274.         {fushu=1;b=0xff-b;a=0xff-a;}
  275.         else fushu=0;
  276.         t=(b<<8)+a;
  277. tt=t*0.0625;
  278. t= tt*10+0.5; //放大10倍輸出并四舍五入
  279. return(t);
  280. }
  281. /******************************************************************************/
  282. uchar key(void)
  283. {
  284.         if(!KEY_1)
  285. {
  286.             delay(10); //去抖
  287.                 if(!KEY_1)
  288.             { yskey++;
  289.                  if(yskey>40)yskey=40;
  290.                 }
  291. }
  292.         if(!KEY_2)
  293. {
  294.             delay(10); //去抖
  295.                 if(!KEY_2)
  296.             { yskey--;
  297.                  if(yskey<=1)yskey=1;
  298.                 }
  299. }
  300.         if(!KEY_3)door=0;else door=1;
  301. return(yskey);               
  302. }

  303. /**************************************************************************/
  304. void znkzysj(void)//智能控制制冷片工作
  305. {
  306.         if(fushu==0&&fushu1==0){if(ys<=temp/10)TR1=1;else {ysj_0=0;TR1=0;n=0;}}
  307.         if(fushu==0&&fushu1==1)TR1=1;
  308.         if(fushu==1&&fushu1==0){ysj_0=0;TR1=0;n=0;}
  309.         if(fushu==1&&fushu1==1){if(ys<=temp/10){ysj_0=0;TR1=0;n=0;}else TR1=1;}
  310. }

  311. /**************************************************************************/
  312. /* T1溢出中斷處理函數(shù) */
  313. void timer1_int() interrupt 3 using 2                // T1溢出中斷,使用工作組2
  314. {
  315.         n++;
  316.         if(n!=500){   TH1= 0x15;    // 重新填入初值
  317.                        TL1= 0xA0;}
  318.         else {ysj_0=1;n=0;TR1=0;}       
  319. }

  320. /**************************************************************************/
  321. void soft_reset(void)
  322. {
  323.    ((void(code*)(void))0x0000)();
  324. }

  325. /*在需要軟件復位的地方使用語句:
  326. soft_reset();      
  327. 一般可實現(xiàn)軟件復位。*/
復制代碼

所有資料51hei提供下載:
電冰箱溫控器設計.rar (5.4 MB, 下載次數(shù): 113)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:727758 發(fā)表于 2020-4-13 15:47 | 只看該作者
電冰箱的溫控能細分嗎,比如儲物,冷藏,冷凍等
回復

使用道具 舉報

板凳
ID:936592 發(fā)表于 2021-6-11 16:37 | 只看該作者
顯示屏圖片?
回復

使用道具 舉報

地板
ID:928284 發(fā)表于 2021-6-12 08:14 | 只看該作者
樓主好技術,好生敬佩!
回復

使用道具 舉報

5#
ID:67838 發(fā)表于 2022-10-25 16:48 | 只看該作者
謝謝樓主分享,果斷下載學習學習,不過仿真不能通過,屏幕只顯示8個零
回復

使用道具 舉報

6#
ID:72050 發(fā)表于 2022-11-1 07:42 | 只看該作者
溫度控制,仿真我不會調(diào)試溫度
回復

使用道具 舉報

7#
ID:34392 發(fā)表于 2022-11-2 19:59 | 只看該作者
不錯,改造一下老冰箱可以的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人欧美一区二区三区白人 | 日韩精品在线观看一区二区 | 波多野结衣中文字幕一区二区三区 | 欧美电影免费观看 | 欧美久久久久久久久 | 久久综合av | 久久久久国产精品一区 | 久久手机在线视频 | 国产乱码精品一区二区三区五月婷 | 成人区精品 | 久久久久亚洲视频 | 久久久91精品国产一区二区精品 | av一级一片| 午夜亚洲| 成人三级在线观看 | 免费黄篇| 水蜜桃亚洲一二三四在线 | 99久久婷婷国产亚洲终合精品 | 色噜噜狠狠色综合中国 | 色先锋影音 | 日韩欧美三级 | 久久久久久久久久久久久久av | 男女啪啪高潮无遮挡免费动态 | 日韩av一区二区在线 | 欧美激情精品久久久久久免费 | www.99热| 国产成人综合在线 | 国产99久久精品一区二区永久免费 | 国产精品视频一二三区 | 在线免费观看毛片 | 欧美日韩精品区 | 九九精品在线 | 一区二区三区免费 | 日韩精品一区二区三区视频播放 | 91精品观看 | 综合色久 | 99热激情 | 亚洲国产精品va在线看黑人 | 黄色免费在线观看网址 | 欧美精品成人 | 天天操妹子 |