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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6655|回復: 5
收起左側

基于單片機的穩壓電源設計

[復制鏈接]
ID:110456 發表于 2017-5-6 14:04 | 顯示全部樓層 |閱讀模式
程序附上,大家可以進來一觀,工程文件電路圖和keil文件在附件里。

基于單片機和TLC的穩壓電源設計

基于單片機和TLC的穩壓電源設計

0.png

完整資料下載:
項目4-基于單片機的穩壓電源設計.zip (120.38 KB, 下載次數: 84)




單片機源程序:
  1. #include <REG51.H>
  2. #include "intrins.h"
  3. #include "AT24C04.h"

  4. #define  uchar unsigned char
  5. #define  uint unsigned int

  6. uchar code  LED[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  7. uchar code Bit_sel[4] = {0x08,0x04,0x02,0x01 }; //各個數碼管對應的位選數據

  8. sbit DIO = P1^0;                 //數據線
  9. sbit CS = P1^1;                         //片選
  10. sbit CLK = P1^2;                //io口時鐘

  11. sbit SCS = P1^4;
  12. sbit SDATA = P1^5;
  13. sbit SCLK = P1^3;

  14. sbit ADD = P3^0;
  15. sbit SUB = P3^1;
  16. sbit Pre_read = P3^2;
  17. sbit Store = P3^3;

  18. uint qian,bai,shi,ge;  //用于顯示數碼管的 千,百,十,個 等四位的顯示
  19. uint val,num;                   //val 是用于輸入DA  的數據,num是用于判斷是不是長按的
  20. uint cp;                           //計數的變量
  21. uchar key_stat;
  22. uchar add_stat,sub_stat;
  23. uchar st_flag,pre_flag;

  24. void delay(uint x)                 //微妙級是延時函數
  25. {
  26.         while(x--)
  27.                 _nop_();
  28. }

  29. /**********************************************
  30.         函數名稱:deal
  31.         函數作用:處理AD的返回值
  32.         函數參數:無
  33.         函數返回值:無
  34. **********************************************/                                                                                          
  35. void deal(uint num)          //顯示程序
  36. {        
  37.         qian=num/1000;              //千,百,十,個處理
  38.         bai=num/100%10;
  39.         shi=num/10%10;
  40.         ge=num%10;
  41. }

  42. /**********************************************
  43.         函數名稱:TL549_AD()
  44.         函數作用:返回AD的返回值
  45.         函數參數:無
  46.         函數返回值:data_ad
  47. **********************************************/        
  48. uint TL549_AD()                    //TLC549處理
  49. {
  50.         uchar i;
  51.         uint data_ad = 0;
  52.         CS = 1;                                //初始化,啟動
  53.         CLK = 0;
  54.         CS = 0;
  55.         _nop_();                    
  56.         for(i = 0;i < 8;i++)        //讀取采集數據,讀取的是上一次采集數據
  57.         {
  58.                 CLK = 1;         
  59.                 if(DIO)data_ad |= 0x01;
  60.                 CLK = 0;  
  61.                 data_ad = data_ad << 1;  
  62.         }         
  63.         CS = 1;
  64.         data_ad = data_ad  * (500/ 256);   
  65.         return(data_ad);
  66. }

  67. /**********************************************
  68.         函數名稱:TLC5615_DA(uint da)
  69.         函數作用:TLC5615_DA 將da轉換后模擬輸出
  70.         函數參數:da
  71.         函數返回值:無
  72. **********************************************/        
  73. void TLC5615_DA(uint da) //        TLC5615 的DA 轉換函數
  74. {
  75.         uchar i;
  76.         da<<=6;

  77.         SCS=0;
  78.         SCLK=0;

  79.         for (i=0;i<12;i++)
  80.         {
  81.                 SDATA=(bit)(da&0x8000);
  82.                 SCLK=1;
  83.                 da<<=1;
  84.                 SCLK=0;
  85.         }

  86.         SCS=1;
  87.         SCLK=0;
  88.         for (i=0;i<12;i++);
  89. }
  90. /**********************************************
  91.         函數名稱:key_scan()
  92.         函數作用:處理那些獨立鍵盤
  93.         函數參數:無
  94.         函數返回值:無
  95. **********************************************/        
  96. void key_scan()
  97. {
  98.         if (ADD == 0)                                                   // ADD 按鍵的鍵盤處理函數
  99.         {
  100.                 delay(10);
  101.                 if (ADD == 0)
  102.                 {
  103.                         add_stat = 1;
  104.                         num ++;
  105.                 }
  106.                 else
  107.                 {
  108.                         add_stat = 0;
  109.                         num = 0;
  110.                 }
  111.                 //此處判斷是不是長按,長按的話 使其步進值 加大
  112.                 if (ADD == 0 && add_stat == 1 && num >= 300)  
  113.                 {
  114.                         val += 5;
  115.                         num = 0;
  116.                 }
  117.                 if (ADD == 1 && add_stat == 1)
  118.                 {
  119.                         val ++;
  120.                         num = 0;
  121.                         add_stat = 0;
  122.                 }
  123.                 if (val >= 1024)
  124.                 {
  125.                         val = 1023;
  126.                 }
  127.         }

  128.         if (SUB == 0)                                                        //SUB 按鍵的鍵盤處理函數
  129.         {
  130.                 delay(10);
  131.                 if (SUB == 0)
  132.                 {
  133.                         sub_stat = 1;
  134.                         num ++;
  135.                 }
  136.                 if (SUB == 0 && sub_stat == 1 && num >= 300)
  137.                 {
  138.                         val -= 5;
  139.                         num = 0;
  140.                 }
  141.                 if (SUB == 1 && sub_stat == 1)
  142.                 {
  143.                         val --;
  144.                         num = 0;
  145.                         sub_stat = 0;
  146.                 }
  147.                 if (val <= 0)
  148.                         val = 0;
  149.         }
  150.                                                                         
  151.         if (Pre_read == 0)                                                   //預讀數據的 鍵盤處理函數
  152.         {
  153.                 delay(100);
  154.                 if (Pre_read == 0)
  155.                 {
  156.                         pre_flag = 1;
  157.                 }
  158.                 if (Pre_read == 1 &&pre_flag == 1 )
  159.                 {
  160.                         pre_flag = 0;
  161.                         val = read_24C04(20);                        //從AT24C04中的地址20 中讀出預存儲的數據
  162.                 }
  163.         }

  164.         if (Store == 0)                                                //保存數值 按鍵的鍵盤處理函數
  165.         {
  166.                 delay(100);
  167.                 if (Store == 0)
  168.                 {
  169.                         st_flag = 1;
  170.                 }
  171.                 if (Store == 1 && st_flag == 1)
  172.                 {
  173.                         st_flag        = 0;
  174.                         write_24C04(20,val);                 //向AT24C04中的地址20 寫入存儲的數據
  175.                 }
  176.         }
  177. }
  178. /**********************************************
  179.         函數名稱:timer0_init (void)
  180.         函數作用:初始化定時器0,并設置
  181.         函數參數:無
  182.         函數返回值:無
  183. **********************************************/        
  184. void timer0_init (void)                            // timer0中斷初始化函數
  185. {
  186.         EA = 0;                     
  187.         TMOD = 0x01;            
  188.         TR0 = 0;                     
  189.         TL0 = (65536-5000)%256;                 //設置計數器初值
  190.         TH0 = (65536-5000)/256;                  
  191.         PT0 = 1;                     
  192.         ET0 = 1;                     
  193.         EA = 1;                     
  194.         TR0 = 1;                     
  195. }
  196. /**********************************************
  197.         函數名稱:main(void)
  198.         函數作用:main主函數入口
  199.         函數參數:無
  200.         函數返回值:無
  201. **********************************************/                                                        
  202. void main(void)                                 //主程序
  203. {  
  204.         timer0_init();                        //初始化定時器0
  205.         init_24C04();                        //初始化AT24C04
  206.         while(1)
  207.         {
  208.                 key_scan();                        //調用鍵盤掃描函數
  209.                 TLC5615_DA(val);        //處理鍵盤發送過來的值
  210.         }
  211. }

  212. /**********************************************
  213.         函數名稱:timer0_isr(void)  interrupt 1
  214.         函數作用:定時器0,方式1,的中斷服務子程序
  215.         函數參數:無
  216.         函數返回值:無
  217. **********************************************/        
  218. void timer0_isr(void)  interrupt 1               // timer0中斷服務函數
  219. {
  220.                                                                  //數碼管的位選變量
  221.         TR0 = 0;                                                //停止計數
  222.         TL0 = (65536-5000)%256;                                        //重新載入計數器初值
  223.         TH0 = (65536-5000)/256;
  224.         cp++;                                        //位循環變量加1
  225.         if(cp >= 4)
  226.                 cp = 0;
  227.         deal(TL549_AD());                       //循環顯示1次,j清零
  228.            TR0 = 1;

  229.         P0=0xff;  //與j對應,P2輸出數碼管的位選信號
  230.         switch(cp)
  231.         {
  232.                 case 0: P0 = LED[ge]; break;           
  233.                 case 1: P0 = LED[shi]; break;           
  234.                 case 2: P0 = LED[bai]&0x7f; break;
  235.                 case 3: P0 = LED[qian]; break;         
  236.         }
  237.         P2 = Bit_sel[cp];
  238. }
復制代碼
回復

使用道具 舉報

ID:1 發表于 2017-6-3 03:40 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:155450 發表于 2017-6-3 08:06 | 顯示全部樓層
仿真怎么不行啊
回復

使用道具 舉報

ID:76408 發表于 2017-8-19 14:31 | 顯示全部樓層
好資料,可惜我現在下不了。
回復

使用道具 舉報

ID:345773 發表于 2018-6-9 21:04 | 顯示全部樓層
樓主,怎么把輸出電壓達到12v呀,求解求解求解求解,給你很多黑幣哦
回復

使用道具 舉報

ID:345773 發表于 2018-6-9 21:43 | 顯示全部樓層
樓主,怎么把輸出弄成12v呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人在线视频 | 国产在线一区二区三区 | 成人夜晚看av | 国产精品美女久久久久久久久久久 | 国产精品永久免费视频 | 久久国产精品一区 | 亚洲午夜精品视频 | 久久精品国产久精国产 | 欧美a区 | www.成人.com | 国产小视频精品 | 超碰男人天堂 | 久久av资源网 | 亚洲精品久久久久久久久久久 | 男女羞羞免费网站 | jizz在线免费观看 | 国产91精品久久久久久久网曝门 | 久久网站免费视频 | 国产高清在线 | 日韩国产一区二区三区 | 午夜丁香视频在线观看 | 亚洲va欧美va人人爽午夜 | 日韩视频国产 | 国产欧美日韩在线播放 | 日韩精品 电影一区 亚洲 | 国产精品高潮呻吟久久 | 97精品国产97久久久久久免费 | 中文精品视频 | 国产成人av在线播放 | 欧美久久久久久 | 久久综合伊人一区二区三 | 福利色导航 | 国产精品视频一二三区 | 色精品视频 | 国产网站在线免费观看 | 精品欧美二区 | 九九综合| 色综合久久久 | 成人在线黄色 | 性视频一区 | 综合亚洲视频 |