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

QQ登錄

只需一步,快速開始

搜索
查看: 4126|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于C51單片機(jī)和ADC0804顯示電壓以及0-255數(shù)值(仿真加程序)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5.        
  6. uchar code table1[]="0123456789";
  7. uchar  table2[]="Vo:0.00V;Nu:000";          
  8. uchar  table3[]="made by Xfei";         

  9. uchar num,x,adval,wen,dy,date;
  10. sbit lcden=P3^2;  //使能
  11. sbit lcdrs=P3^0;  //數(shù)據(jù)/指令
  12. sbit lcdrw=P3^1;  //讀/寫
  13. sbit lcds1=P3^3;  
  14. sbit lcds2=P3^4        ;
  15. sbit adwr=P3^6;                //寫信號(hào)輸入端
  16. sbit adrd=P3^7;                //讀信號(hào)輸入端
  17. sbit adcs=P3^5;            //片選信號(hào)


  18. //延時(shí)ms//
  19. void  delay(uint x)
  20. {
  21.    uint i,j;
  22.    for(i=0;i<x;i++)
  23.      for(j=0;j<110;j++);
  24. }


  25. //MCU寫指令//
  26. void write_com(uchar com)
  27. {
  28.    lcdrs=0;
  29.    P2=com;
  30.    delay(5);
  31.    lcden=1;
  32.    delay(5);
  33.    lcden=0;
  34. }                                  


  35. //MCU寫數(shù)據(jù)//
  36. void write_date(uchar date)
  37. {
  38.    lcdrs=1;
  39.    P2=date;
  40.    delay(5);
  41.    lcden=1;
  42.    delay(5);
  43.    lcden=0;
  44. }


  45. //初始化//
  46. void init()
  47. {
  48.   adcs=0;
  49.   lcdrw=0;
  50.   lcden=0;
  51.    write_com(0x38);         
  52.    write_com(0x0c);
  53.    write_com(0x06);
  54.    write_com(0x01);         
  55. /*
  56.     while(table3[num]!='\0')
  57.     {
  58.         write_date(table3[num++]);
  59.         delay(100);
  60.         }
  61.         lcden=1;
  62.         delay(1000);
  63.         lcden=0;
  64.    

  65.         write_com(0x80+0x40);
  66.         num=0;//很重要!
  67.         while(table2[num]!='\0')
  68.            {
  69.                     write_date(table2[num++]);
  70.            }                               */
  71. }

  72. /*小改嘻嘻*/


  73. //顯示第一行//
  74. void disp1()
  75. {
  76. uchar i;
  77. write_com(0x80+0x00);
  78. for (i=0;i<12;i++)
  79.         {
  80.         write_date(table3[i]);
  81.         delay(100);
  82.         }
  83. }


  84. //顯示第二行//
  85. void disp2()
  86. {
  87. uchar i;
  88. write_com(0x80+0x40);
  89. for (i=0;i<12;i++)
  90.         {
  91.         write_date(table2[i]);
  92.         delay(100);
  93.         }
  94. }

  95.    
  96. void set_shu1(uchar  add,uchar date)
  97.    {
  98.      uchar bai,shi,ge;
  99.          bai=date/51;
  100.          shi=((date%51)*10/51);         
  101.          ge=((date%51)*10%51)*10/51;
  102.          write_com(0x80+0x40+add);                 //地址
  103.              {
  104.                  write_date(table1[bai]);          //百位數(shù)值
  105.                  }                                                         
  106.          write_com(0x80+0x40+add+2);         //地址右移二位
  107.              {
  108.                  write_date(table1[shi]);         //十位數(shù)值
  109.                  }
  110.           write_com(0x80+0x40+add+3);         //地址右移三位
  111.              {
  112.                  write_date(table1[ge]) ;         //個(gè)位數(shù)值 //將值轉(zhuǎn)換成具體數(shù)
  113.              }         
  114.         }         


  115. void set_shu2(uchar  add,uchar date)
  116. {
  117.      uchar bai,shi,ge;
  118.          bai=date/100;
  119.          shi=date%100/10;
  120.          ge=date%10;
  121.          write_com(0x80+0x40+add);               
  122.          {
  123.          write_date(table1[bai]);
  124.          }
  125.          write_com(0x80+0x40+add+1);
  126.         {
  127.          write_date(table1[shi]);
  128.          }
  129.          write_com(0x80+0x40+add+2);         
  130.         {
  131.          write_date(table1[ge])  ;
  132.          }                                           //將電壓值轉(zhuǎn)換為0~225的值*/
  133. }

  134. void st_ad() //開AD
  135. {
  136.    adwr=1;
  137.    _nop_();
  138.    adwr=0;
  139.    _nop_();
  140.    adwr=1;

  141. }
  142. void red_ad()//讀AD
  143. {
  144.    adrd=1;
  145.    _nop_();
  146.    adrd=0;
  147.    _nop_();
  148.    adrd=0;

  149. }


  150. void main()
  151. {       
  152.    
  153.         init();
  154.         disp1();
  155.         disp2();
  156.        
  157.        
  158.          while(1)
  159.          {           
  160.            write_com(0x80+0x40+7);
  161.           
  162.            st_ad();
  163.            set_shu1(3,adval);
  164.            set_shu2(12,adval);
  165.            red_ad();
  166.            adval=P1;   //P1的值送給date
  167.           // dy=adval/255;
  168.           // P2=wen;
  169.           }
  170.           //while(1);

  171. }
復(fù)制代碼

所有資料51hei提供下載:
ADC0804顯示電壓.rar (61.54 KB, 下載次數(shù): 69)


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表