找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3895|回复: 1
打印 上一主题 下一主题
收起左侧

Proteus仿真使用52单片机与ad0808进行ADC采集与显示

[复制链接]
跳转到指定楼层
楼主
如题,附件自取


单片机源程序如下:
  1. #include <reg52.h>

  2. #define uchar unsigned char  
  3. #define uint unsigned int
  4. #define ulong unsigned long
  5. #define p0 P0
  6. #define p3 P3

  7. sbit en=P1^0;
  8. sbit rs=P1^2;
  9. sbit rw=P1^1;

  10. sbit adda=P1^3;
  11. sbit addb=P1^4;
  12. sbit addc=P1^5;
  13. sbit ale=P1^6;/*选择通道*/

  14. sbit start=P1^7;/*上升ad沿复位,下降沿ad开始转换模数*/
  15. sbit eoc=P3^0;        /*为1时就可以取数据了(硬件自己干的)*/
  16. sbit oe=P3^1;        /*为0 ad输出高阻态,为1 ad向单片机输数据(你要做的)*/

  17. uint  vm0;
  18. uchar v,v_2,v_1,v_0;

  19.   
  20. char cont[]={'0','1','2','3','4','5','6','7','8','9'};

  21. void init();
  22. void init2();
  23. void delay(uint z);
  24. void delay1(uint m);
  25. void write_com(uchar com);
  26. void write_data(uchar date);
  27. void LCD_set_xy( unsigned char x, unsigned char y );

  28. void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data1)
  29. {
  30.   LCD_set_xy( X, Y );
  31.   write_data( data1);
  32.   
  33. }

  34. void LCD_set_xy( unsigned char x, unsigned char y )
  35. {
  36.     unsigned char address;
  37.     if (y == 0) address = 0x80 + x;
  38.     else   address = 0xc0 + x;
  39.     write_com( address);
  40. }

  41. void write_string(unsigned char X,unsigned char Y,unsigned char *s)
  42. {
  43.     LCD_set_xy( X, Y );   
  44.     while (*s)  
  45.     {
  46.       write_data( *s );
  47.       s ++;
  48.     }
  49.       
  50. }

  51. void main()
  52. {
  53. init();
  54. init2();
  55. delay(100);
  56. while(1)
  57. {
  58. start=0;
  59. start=1;
  60. oe=0;
  61. start=0;
  62. while(eoc==1);
  63. oe=1;                          
  64. v=p0;
  65. oe=0;
  66. if(v>50)
  67. {
  68. vm0=((uint)v*196)/100;
  69. }
  70. else
  71. {
  72.   vm0=(uint)v*2;
  73. }
  74. v_2=(vm0/100)%10;
  75. v_1=(vm0%100)/10;
  76. v_0=vm0%10;

  77. write_string(0,0,"U:");
  78. LCD_write_char(2,0,v_2+'0');
  79. LCD_write_char(3,0,'.');
  80. LCD_write_char(4,0,v_1+'0');
  81. LCD_write_char(5,0,v_0+'0');
  82. write_string(6,0,"v");


  83. }

  84. }

  85. void init()
  86. {
  87. en=0;
  88. rw=0;
  89. write_com(0x38);
  90. write_com(0x0c);
  91. write_com(0x06);
  92. write_com(0x01);
  93. }

  94. void init2()
  95. {
  96.   adda=0;
  97.   addb=0;
  98.   addc=0;
  99.   ale=0;
  100.   delay(10);
  101.   ale=1;
  102.   delay(10);
  103.   ale=0;
  104. }


  105. void delay(uint z)
  106. {
  107. uchar x,y;
  108. for (x=z;x>0;x--)
  109. for (y=10;y>0;y--);
  110. }


  111. void write_com(uchar com)
  112. {
  113. rs=0;
  114. ……………………

  115. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:

adc0808简单的实验(用lcd1602显示电压)有仿真和程序.rar (41.13 KB, 下载次数: 75)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:215822 发表于 2020-5-14 09:12 | 只看该作者
附件中的ad.dsn文件用proteus 8打不开呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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