欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5962|回復: 1
收起左側

單片機手動程控放大器仿真+源程序+電路原理圖(MAX7219驅動數碼管顯示)

[復制鏈接]
ID:137190 發表于 2016-8-31 21:18 | 顯示全部樓層 |閱讀模式
0.png 0.png

單片機手動程控放大器仿真電路原理圖(工程文件清晰版請下載本帖最后的附件),采用MAX7219驅動數碼管顯示.

單片機手動程控放大器源程序如下:
  1. #include <AT89X52.h>
  2. #include <intrins.h>
  3. sbit sbF1 = P2 ^ 0;   //不進行放大處理
  4. sbit sbF20 = P2 ^ 1;  //放大20倍
  5. sbit sbF30 = P2 ^ 2;  //放大30倍
  6. sbit sbF50 = P2 ^ 3;  //放大50倍

  7. sbit sbDIN = P3 ^ 0;                        //MAX7219的數據引腳
  8. sbit sbLOAD = P3 ^ 1;                      //MAX7219的控制引腳
  9. sbit sbCLK = P3 ^ 2;                       //MAX7219的時鐘引腳

  10. //顯示緩沖區定義
  11. unsigned char Disp_Buffer[8]=            //MAX7219的輸出緩沖
  12. {
  13.          0,0,0,0,0,0,0,0
  14. };
  15. unsigned char Disp_Buffer1[8]=            //MAX7219的輸出緩沖
  16. {
  17.          0,0,0,0,0,0,0,1
  18. };
  19. unsigned char Disp_Buffer20[8]=            //MAX7219的輸出緩沖
  20. {
  21.          0,0,0,0,0,0,2,0
  22. };
  23. unsigned char Disp_Buffer30[8]=            //MAX7219的輸出緩沖
  24. {
  25.          0,0,0,0,0,0,3,0
  26. };
  27. unsigned char Disp_Buffer50[8]=            //MAX7219的輸出緩沖
  28. {
  29.          0,0,0,0,0,0,5,0
  30. };

  31. void DelayMS(unsigned int ms)              //毫秒級延時函數
  32. {
  33.         unsigned int i,j;
  34.         for( i=0;i<ms;i++)
  35.                 for(j=0;j<1141;j++);        
  36. }
  37. //寫MAX7219函數,Addr為MAX7219的內部寄存器地址,Dat為待寫入的數據
  38. void Write7219(unsigned char Addr,unsigned char Dat)
  39. {
  40.          unsigned char i;
  41.         sbLOAD = 0;                                         
  42.         for(i=0;i<8;i++)                               //先送出8位地址
  43.         {
  44.                  sbCLK = 0;                                   //時鐘拉低
  45.                 Addr <<= 1;                                  //移位送出地址
  46.                 sbDIN        = CY;                                    //送出數據
  47.                 sbCLK = 1;                                   //時鐘上升沿
  48.                 _nop_();
  49.                 _nop_();
  50.                 sbCLK = 0;                                   
  51.         }
  52.         for(i=0;i<8;i++)                              //再送出8位數據
  53.         {
  54.                  sbCLK = 0;
  55.                 Dat <<= 1;                                  //移位送出數據
  56.                 sbDIN        = CY;
  57.                 sbCLK = 1;
  58.                 _nop_();
  59.                 _nop_();
  60.                 sbCLK = 0;        
  61.         }
  62.         sbLOAD = 1;
  63. }
  64. //MAX7129的初始化函數
  65. void Initialise7219()
  66. {
  67.          Write7219(0x09,0xff);                 //編碼模式寄存器
  68.         Write7219(0x0a,0x07);                 //顯示亮度控制
  69.         Write7219(0x0b,0x07);                 //掃描控制
  70.         Write7219(0x0c,0x01);                 //關閉模式控制寄存器設置
  71. }

  72. void  Wobbling ()   //延時程序防止按鍵抖動
  73. {
  74.   unsigned int i;
  75.   for(i=0;i<1000;i++);
  76. }

  77. void main()
  78. {
  79.   unsigned char i;
  80.         Initialise7219();                     //首先初始化MAX7129
  81.         DelayMS(1);                         //延時1毫秒
  82.   for(i=0;i<8;i++)
  83.         {
  84.                  Write7219(i+1,Disp_Buffer[i]);      //將顯示緩沖區內的數據循環送出
  85.         }
  86.   P1 = 0x00;    //初始化端口
  87.   P2 = 0xFF;  
  88.   P1 = 0x11;   //再不按鍵的情況下默認為不進行放大處理
  89.   while(1)
  90.   {
  91.   if (sbF1 == 0) //判斷是否按下按鍵
  92.   {
  93.     Wobbling();   //時間延時程序,軟件防抖動
  94.     if( sbF1 == 0)  //確定按下按鍵
  95.     {
  96.       P1 = 0x11;   //放大1倍
  97.       for(i=0;i<8;i++)
  98.             {
  99.                      Write7219(i+1,Disp_Buffer1[i]);      //顯示放大1倍
  100.             }
  101.     }
  102.   }
  103.   if(sbF20 == 0)  //判斷是否按下按鍵         
  104.   {
  105.     Wobbling();   //時間延時程序,軟件防抖動
  106.     if(sbF20 == 0) //確定按下按鍵
  107.     {            
  108.       P1 = 0x22;   //放大20倍
  109.       for(i=0;i<8;i++)
  110.             {
  111.                      Write7219(i+1,Disp_Buffer20[i]);      //顯示放大20倍
  112.             }
  113.      }            
  114.   }
  115.   if(sbF30 == 0) //判斷是否按下按鍵         
  116.   {
  117.     Wobbling();   //時間延時程序,軟件防抖動
  118.     if(sbF30 == 0) //確定按下按鍵   
  119.     {         
  120.       P1 = 0x44;   //放大30倍  
  121.       for(i=0;i<8;i++)
  122.             {
  123.                      Write7219(i+1,Disp_Buffer30[i]);      //顯示放大20倍
  124.             }
  125.      }            
  126.   }
  127.   if(sbF50 == 0) //判斷是否按下按鍵         
  128.   {
  129.     Wobbling();   //時間延時程序,軟件防抖動
  130.     if(sbF50 == 0)//確定按下按鍵  
  131.     {         
  132.       P1=0x88;  //放大50倍   
  133.       for(i=0;i<8;i++)
  134.             {
  135.                      Write7219(i+1,Disp_Buffer50[i]);      //顯示放大20倍
  136.             }
  137.      }         
  138.   }
  139. }
  140. }
復制代碼


0.png
單片機手動程控放大器所有資料下載:
http://www.raoushi.com/bbs/dpj-54940-1.html


回復

使用道具 舉報

ID:503507 發表于 2019-6-29 08:51 | 顯示全部樓層
你做處實物了嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表