找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4701|回复: 1
收起左侧

单片机ADC0831模数转换程序+电路图+制作实物

[复制链接]
ID:99624 发表于 2015-12-23 01:41 | 显示全部楼层 |阅读模式
补交作业!!!!!




adc0831电路图

                                                   

下面是adc0831程序51单片机源代码:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit ser=P1^0;
  6. sbit sck=P1^1;
  7. sbit rck=P1^2;
  8. sbit lcdrs=P1^4;
  9. sbit lcdrw=P1^5;
  10. sbit lcden=P1^6;

  11. sbit dat=P2^2;
  12. sbit sclk=P2^1;
  13. sbit cs=P2^0;

  14. sbit rled=P2^6;
  15. sbit gled=P2^7;
  16. uchar e,f,g;

  17. void delay(uint a)
  18. {
  19.         uint x,y;
  20.         for(x=a;x>0;x--)
  21.          for(y=110;y>0;y--);
  22. }
  23.   unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  24. void timeinit()
  25. {
  26.         TMOD=0x21;
  27.         TH1=0XFD;
  28.         TH1=0XFD;
  29.         TH0=(65536-50000)/256;
  30.         TL0=(65536-50000)%256;
  31.         EA=1;
  32.         TR1=1;
  33.        
  34.        
  35.         ET0=1;        TR0=1;
  36. }


  37. uchar adc0831()
  38. {
  39.         uint i,temp;
  40.            dat=1;
  41.         _nop_();
  42.         _nop_();                sclk=0;
  43.         _nop_();   
  44.         _nop_();
  45.         cs=0;          
  46.         _nop_();
  47.         _nop_();

  48.         sclk=1;
  49.         _nop_();   
  50.         _nop_();
  51.         sclk=0;
  52.         _nop_();         
  53.         _nop_();
  54.         sclk=1;
  55.         _nop_();
  56.         _nop_();   sclk=0;
  57.         for(i=0;i<8;i++)
  58.         {                  
  59.                           
  60.                 _nop_();
  61.                 _nop_();         
  62.                 temp=temp<<1;
  63.                 if(dat)
  64.                 temp=temp|dat;                 
  65.                 sclk=1;
  66.                 _nop_();
  67.                 _nop_();
  68.                 sclk=0;
  69.         }
  70.         cs=1;       
  71.         return (temp);         
  72. }               

  73. void lcdwrite_com(uchar com)
  74. {
  75.         lcdrs=0;
  76.         lcdrw=0;
  77.         P0=com;
  78.         delay(15);
  79.         lcden=1;
  80.         delay(15);
  81.         lcden=0;               
  82. }
  83. void lcdwrite_date(uchar date)
  84. {
  85.         lcdrs=1;
  86.         lcdrw=0;
  87.         P0=date;
  88.         delay(15);
  89.         lcden=1;
  90.         delay(15);
  91.         lcden=0;
  92. }
  93. void lcd1602_init()
  94. {
  95.         lcden=0;
  96.         lcdwrite_com(0x38);
  97.         lcdwrite_com(0x0f);
  98.         lcdwrite_com(0x06);
  99.         lcdwrite_com(0x01);
  100.         lcdwrite_com(0x80);
  101. }
  102. void lcd1602_gd()
  103. {
  104.         lcdwrite_date(0x30+1);lcdwrite_com(0x80+0x01);lcdwrite_date(':');
  105.         lcdwrite_com(0x80+0x07);lcdwrite_date('v');
  106.         lcdwrite_com(0x80+0x09);
  107.         lcdwrite_date(0x30+2);        lcdwrite_com(0x80+0x0a);lcdwrite_date(':');
  108.         lcdwrite_com(0x80+0x40);
  109.         lcdwrite_date(0x30+3);        lcdwrite_com(0x80+0x41);lcdwrite_date(':');
  110.         lcdwrite_com(0x80+0x49);
  111.         lcdwrite_date(0x30+4);        lcdwrite_com(0x80+0x4a);lcdwrite_date(':');
  112. }
  113. void lcd1602_ry()
  114. {
  115.     uint i,ad,jg1,jg2,jg3,jg4;
  116.         ad=adc0831();
  117. //        ad=ad/51*100;
  118.         jg1=ad/51;
  119.         jg2='.';
  120.         jg3=ad%51*10/51;
  121.         jg4=ad%51*10%51*10/51;

  122.         lcdwrite_com(0x80+0x03);
  123.         lcdwrite_date(0x30+jg1);
  124.         lcdwrite_date(jg2);
  125.         lcdwrite_date(0x30+jg3);
  126.         lcdwrite_date(0x30+jg4);
  127.          

  128. }
  129. void senddata(uchar a)
  130. {
  131.         uchar x,i;
  132.         x=a;
  133.         for(i=0;i<8;i++)
  134.         {
  135.                   ser=(bit)(x&0x80);
  136.                 x=x<<1;
  137.                 sck=0;
  138.                 delay(1);
  139.                 sck=1;
  140.         }
  141.         rck=0;
  142.         delay(1);
  143.         rck=1;
  144. }
  145. void main()
  146. {
  147.     timeinit();
  148.         lcd1602_init();
  149.         lcd1602_gd();        //  lcd1602_ry();
  150.         while(1)
  151.         {       
  152.          senddata(table[f]);
  153.                 if((f%2)==0)
  154.                 {
  155.                         rled=1;
  156.                         gled=0;
  157.                 }
  158.                 else
  159.                 {
  160.                         rled=0;
  161.                         gled=1;
  162.                 }         
  163. //          
  164.          if(f) lcd1602_ry();//while(1);               
  165.         }         
  166. }

  167. void time0()interrupt 1
  168. {
  169.         TH0=(65536-50000)/256;
  170.         TL0=(65536-50000)%266;
  171.         e++;  g=!g;
  172.         if(e>=20)
  173.         {
  174.                 e=0;
  175.                 f++;
  176.                
  177.                 if(f>9)f=0;
  178.         }       
  179. }
复制代码



回复

使用道具 举报

ID:79874 发表于 2018-6-27 09:25 | 显示全部楼层
可以传一份原始的程序+仿真电路吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表