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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1889|回復(fù): 1
收起左側(cè)

單片機(jī)ADC0832模數(shù)轉(zhuǎn)換芯片顯示采集電壓Proteus仿真程序

[復(fù)制鏈接]
ID:235285 發(fā)表于 2023-12-9 10:57 | 顯示全部樓層 |閱讀模式
最近在學(xué)習(xí)ADC0832這款芯片,雖然說(shuō)型號(hào)老了點(diǎn),但是學(xué)懂了這個(gè),其他AD芯片就不是這么難了。寫(xiě)了程序, 給大家學(xué)習(xí)參考!

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真結(jié)果.jpg

單片機(jī)源程序如下:
  1. //-----------------------------------------------------------------
  2. //  說(shuō)明: 調(diào)整VR1時(shí),ADC0832將模擬電壓轉(zhuǎn)換為數(shù)字電壓顯示在1602液晶
  3. //        屏第0行,液晶屏第1行同時(shí)以進(jìn)程條方式顯示當(dāng)前電壓大小.
  4. //
  5. //-----------------------------------------------------------------
  6. #include <reg51.h>
  7. #include <intrins.h>
  8. #include <string.h>
  9. #define uchar  unsigned char
  10. #define uint unsigned int
  11. //ADC0832引腳定義
  12. sbit CS   =  P1^0;                //片選線(xiàn)(電路中固定連接低電平)
  13. sbit CLK  =  P1^1;                //時(shí)鐘線(xiàn)
  14. sbit DIO  =  P1^2;                //數(shù)據(jù)線(xiàn)
  15. //LCD1602端口定義
  16. sbit RS = P2^0;                        //寄存器選擇
  17. sbit RW = P2^1;                        //讀寫(xiě)控制
  18. sbit E  = P2^2;                        //使能控制
  19. #define LCD_PORT  P0        //液晶端口
  20. uchar Disp_Buff1[] = " VOLTAGE:  0.00V";        //數(shù)字電壓顯示緩沖
  21. uchar Disp_Buff2[16];                                                //進(jìn)程條圖形顯示緩沖
  22. #define delay4us() { _nop_();_nop_();_nop_();_nop_();}
  23. //-----------------------------------------------------------------
  24. // 延時(shí)函數(shù)
  25. //-----------------------------------------------------------------
  26. void delay_ms(uint x)
  27. {
  28.         uchar t; while(x--) for(t = 0; t < 120; t++);
  29. }

  30. //-----------------------------------------------------------------
  31. // 讀LCD忙狀態(tài)
  32. //-----------------------------------------------------------------
  33. bit Read_LCD_Busy_Flag()
  34. {
  35.         uchar result;
  36.         LCD_PORT=0xff;                        //液晶屏端口電平拉高
  37.         RS=0;RW=1;                            //選擇命令寄存器,準(zhǔn)備讀
  38.         E=1;delay4us(); result=P0; E=0;       //下降沿讀命令寄存器
  39.         return (result&0x80)? 1 : 0;          //返回忙狀態(tài)
  40. }

  41. //-----------------------------------------------------------------
  42. // 寫(xiě)LCD命令
  43. //-----------------------------------------------------------------
  44. void Write_LCD_Command(uchar cmd)        
  45. {
  46.         while(Read_LCD_Busy_Flag());           //液晶屏忙等待
  47.         RS=0;RW=0;                             //選擇命令寄存器,準(zhǔn)備寫(xiě)
  48.         E=0; _nop_();_nop_();LCD_PORT=cmd;     //數(shù)據(jù)送到液晶屏端口
  49.         delay4us();E=1;delay4us();E=0;         //寫(xiě)入后禁止液晶屏
  50. }

  51. //-----------------------------------------------------------------
  52. // 寫(xiě)LCD數(shù)據(jù)
  53. //-----------------------------------------------------------------
  54. void Write_LCD_Data(uchar dat)
  55. {
  56.         while(Read_LCD_Busy_Flag());           //液晶屏忙等待
  57.         RS=1;RW=0;                             //選擇數(shù)據(jù)寄存器,準(zhǔn)備寫(xiě)
  58.         E=0; LCD_PORT=dat; delay4us();         //數(shù)據(jù)送到液晶屏端口
  59.         E=1;delay4us(); E=0;                   //寫(xiě)入后禁止液晶屏
  60. }

  61. //-----------------------------------------------------------------
  62. // 在LCD指定行/列位置顯示字符串
  63. //-----------------------------------------------------------------
  64. void LCD_Show_String(uchar r,uchar c, char *s)
  65. {
  66.         uchar i=0;
  67.         uchar code DDRAM[]={0x80,0xc0};              //液晶屏上下兩行的DDRAM首地址   
  68.         Write_LCD_Command(DDRAM[r] | c);             //設(shè)置顯示起始位置
  69.         while(s[i] && i<16) Write_LCD_Data(s[i++]);  //輸出顯示字符
  70. }

  71. //-----------------------------------------------------------------
  72. // LCD初始化
  73. //-----------------------------------------------------------------
  74. void LCD_Initialise()
  75. {
  76.         Write_LCD_Command(0x38); delay_ms(1);
  77.         Write_LCD_Command(0x0C); delay_ms(1);
  78.         Write_LCD_Command(0x06); delay_ms(1);
  79.         Write_LCD_Command(0x01); delay_ms(1);
  80. }

  81. //-----------------------------------------------------------------
  82. // 獲取AD轉(zhuǎn)換結(jié)果 ( 0通道 )
  83. //-----------------------------------------------------------------
  84. uchar Get_AD_Result()
  85. {
  86.         uchar i,dat1=0,dat2=0;
  87.         //使能ADC0832,時(shí)鐘線(xiàn)初始置低電平
  88.         CS=0; CLK=0;
  89.         //第1個(gè)時(shí)鐘脈沖上升沿之前,通過(guò)DIO選擇模式
  90.         DIO=1;        _nop_();_nop_();
  91.         CLK=1;        _nop_();_nop_();
  92.         //第2個(gè)時(shí)鐘脈沖上升沿之前,通過(guò)DIO選擇模式
  93.         //設(shè)DI=1選擇單端(SGL) 設(shè)DI=0 選擇分差(DIF)
  94.         //下面設(shè)置的是單端模式
  95.         CLK=0; DIO=1;  _nop_();_nop_();
  96.         CLK=1;         _nop_();_nop_();
  97.         //第2個(gè)時(shí)鐘脈沖上升沿之前,設(shè)DI=0/1,分別對(duì)應(yīng)選擇CH0/CH1
  98.         CLK=0; DIO=0;  _nop_();_nop_();
  99.         CLK=1;         _nop_();_nop_();
  100.         //第3個(gè)時(shí)鐘脈沖下升沿之后置DI=1,釋放數(shù)據(jù)線(xiàn),準(zhǔn)備接收(設(shè)置原理可參考第一章端口說(shuō)明)
  101.         //P1端口讀取數(shù)據(jù)時(shí)需要先寫(xiě)1,否則總線(xiàn)將出現(xiàn)邏輯沖突(黃色方塊閃爍)
  102.         CLK=0; DIO=1;  _nop_();_nop_();
  103.         //根據(jù)時(shí)序圖可知,在正式讀取轉(zhuǎn)換數(shù)據(jù)之前,此時(shí)的D0將固定輸出0
  104.         //P3=(uchar)DIO;
  105.         //第4~11,共8個(gè)下降沿讀數(shù)據(jù)(MSB-LSB)
  106.         for(i=0;i<8;i++)
  107.         {
  108.                 CLK=1;        _nop_();_nop_();
  109.                 CLK=0;        _nop_();_nop_();
  110.                 dat1<<=1;
  111.                 if(DIO)
  112.                         dat1=dat1+0x01;
  113.         }
  114.         //第11~18,共8個(gè)下降沿讀數(shù)據(jù)(LSB——MSB)
  115.         for(i=0;i<8;i++)
  116.         {
  117.                 dat2>>=1;
  118.                 if(DIO)
  119.                         dat2=dat2+0x80;
  120.                 CLK=1;       _nop_();_nop_();
  121.                 CLK=0;       _nop_();_nop_();
  122.         }
  123.         CS=1; //禁止ADC0832
  124.         //如果MSB——LSB和LSB——MSB讀取的結(jié)果相同則返回讀取的結(jié)果,否則返回0
  125.         if(dat1==dat2)
  126.                 return dat1;
  127.         return 0x00;
  128. }

  129. //-----------------------------------------------------------------
  130. // 主程序
  131. //-----------------------------------------------------------------
  132. void main()
  133. {
  134.         uchar  AD; uint        d;                //注意d的類(lèi)型為uint
  135.         LCD_Initialise();                        //初始化LCD
  136.         while(1)
  137.         {       
  138.                 AD=Get_AD_Result();    //獲取A/D轉(zhuǎn)換值
  139.                 //根據(jù)四舍五入法計(jì)算電壓值(放大100倍以便分解)
  140.                 d=AD*500.0*2/511.0;
  141.                 //根據(jù)舍尾取整數(shù)計(jì)算電壓值(放大100倍以便分解)
  142.                 //將d = AD*500.0/256;
  143.                 //將AD轉(zhuǎn)換后得到數(shù)據(jù)分解為三個(gè)數(shù)位
  144.                 Disp_Buff1[11] = d / 100     +'0';
  145.                 Disp_Buff1[13] = d / 10 %10  +'0';
  146.                 Disp_Buff1[14] = d % 10      +'0';
  147.                 LCD_Show_String(0,0,Disp_Buff1);
  148.                 //將模數(shù)值折算為實(shí)心方塊及空心方框字符個(gè)數(shù),控制進(jìn)程條圖形顯示
  149.         }
  150. }
復(fù)制代碼

所有資料51hei附件下載:
仿真程序.7z (34.52 KB, 下載次數(shù): 59)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:994634 發(fā)表于 2023-12-14 08:24 | 顯示全部樓層
注釋很到位,便于學(xué)習(xí)和參考。已下載,謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩三级一区 | 性色av网站 | 日本三级韩国三级美三级91 | 黄色激情视频在线观看 | 成年人毛片 | 在线免费黄色 | 青草视频在线 | 岛国在线视频 | 成人毛片在线播放 | 成人三级在线观看 | 日本成人小视频 | 亚洲色欧美 | www.四虎在线 | 久久国内精品 | 911看片| 免费成年人视频 | 欧美午夜在线 | 91成人在线视频 | av网站免费在线观看 | 激情导航| 国产涩涩 | 国产在线毛片 | a级黄色片 | 婷婷午夜天 | 中文字幕在线观看亚洲 | 成人在线免费视频观看 | 四虎最新地址 | 欧美日韩国 | 国产无限资源 | 成人国产 | 91精品国产日韩91久久久久久 | 日韩精品福利 | 国产毛片毛片毛片 | 亚洲黄色在线 | 国产乱码精品一区二区三 | 国产视频在线观看视频 | 国产一级片免费 | 在线观看二区 | 亚洲视频一区二区三区四区 | 久久久久久久久久久久久久久久久久久 | 天天干天天操天天 |