找回密码
 立即注册

QQ登录

只需一步,快速开始

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

运用51单片机ALE引脚时钟的ADC0809模数转换系统Proteus仿真+代码

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


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

  4. #define uint  unsigned int
  5. #define uchar unsigned char
  6. #define ADC_PORT   P0
  7. #define DATA_PORT  P1

  8. sbit START=P3^6;
  9. sbit OE=P3^7;
  10. sbit AD_ALE=P2^0;
  11. sbit EOC=P3^3;

  12. sbit  LCDRW =  P2^2; //定义LCD引脚
  13. sbit  LCDRS =  P2^3;
  14. sbit  LCDEN  =  P2^1;

  15. sbit CLK = P3^5;

  16. uint dat;

  17. //--------------------------------------------  
  18. //             延时函数
  19. //--------------------------------------------  
  20. void delay_ms(uint t)
  21. {  
  22.     int j;  
  23.     for(;t!=0;t--)  
  24.        for (j=0;j<110;j++);     
  25. }
  26. //--------------------------------------------  
  27. //              写数据函数  _可用于显示一个字符
  28. //--------------------------------------------  
  29. void write_data(uint dat)
  30. {  
  31.     LCDRS=1;       //数据  
  32.     DATA_PORT=dat; //把数据总到P口
  33.     delay_ms(1);   //当晶振较高时加延时  
  34.     LCDEN=1;  
  35.     delay_ms(1);   //当晶振较高时加延时  
  36.     LCDEN=0;       //关使能  
  37. }

  38. //--------------------------------------------  
  39. //             写命令函数 ——可用于定位显示地址
  40. //--------------------------------------------  
  41. void write_com(uint com)
  42. {  
  43.     LCDRS=0;        //命令
  44.     DATA_PORT=com;  
  45.     delay_ms(1);    //当晶振较高时加延时  
  46.     LCDEN=1;  
  47.     delay_ms(1);    //当晶振较高时加延时
  48.     LCDEN=0;  
  49. }
  50. //--------------------------------------------  
  51. //        1602初始化
  52. //--------------------------------------------  
  53. void lcd_init()
  54. {  
  55.                 LCDEN=0;
  56.     LCDRW=0;  
  57.     LCDRS=0;  
  58.     write_com(0x36);            //set text home address  
  59.     write_com(0x38);
  60.     write_com(0x0c);                   //开显示,不显示光标 0x0f为开显示,开光标   
  61.     write_com(0x06);            //写一个字符后地址加一  
  62.     write_com(0x01);            //显示清零,数据指针清零
  63.     write_com(0x80+0);            //定位到,第一行开头
  64. }
  65. //--------------------------------------------  
  66. //        打印函数——字符串
  67. //--------------------------------------------  
  68. void print_string(uchar* str)
  69. {  
  70.     int i;  
  71.     for(i=0;str[i]!=0;i++)  
  72.     {         
  73.         write_data(str[i]);  
  74.     }  
  75. }
  76. //--------------------------------------------------------------  
  77. //字符串——打印函数,自行定位 x:列  y:行(y=1:第1行:y=2:第2行)
  78. //--------------------------------------------------------------
  79. void print_string_location(uint x,uint y,uchar* str)
  80. {
  81.         int i;          
  82.         if(y==1)                                                          //第1行
  83.         {
  84.                 for(i=0;str[i]!=0;i++)  
  85.             {
  86.                         write_com(0x80+(x++));                  //定位到,第1行 +x        处显示
  87.                         write_data(str[i]);
  88.                 }
  89.         }
  90.         else if(y==2)                                                  //第2行
  91.         {
  92.                 for(i=0;str[i]!=0;i++)  
  93.             {
  94.                         write_com(0x80+0x40+(x++));   //定位到,第2行 +x 处显示
  95.                         write_data(str[i]);
  96.                 }
  97.         }           
  98. }
  99. //--------------------------------------------  
  100. //          AD0809初始化-端口3
  101. //--------------------------------------------  
  102. void  Ad0809Init3(void)
  103. {
  104.        
  105.         AD_ALE=0;
  106.         START=1;
  107.         OE=1;
  108.         START=0;delay_ms(5);START=1;
  109.        
  110.         while(EOC==1);
  111.         OE=0;
  112.         dat=ADC_PORT;
  113.         OE=1;
  114. }
  115. void print_data0()
  116. {
  117.   char z[18];
  118.         print_string_location(0,1,"DATA:");         //显示DATA:字符串
  119.         sprintf((char*)z,"%d ",dat);//合并参数字符串
  120.         print_string_location(0,2,z);             //显示电阻值
  121. }
  122. void main()
  123. {
  124.         lcd_init();
  125.         while(1)
  126.         {               
  127.                         P0=0xf3;
  128.                         Ad0809Init3();
  129.                         dat=dat*19.60784;
  130.                         print_data0();
  131.         }
  132. }
复制代码

所有资料51hei提供下载:
ADC0809.rar (75.01 KB, 下载次数: 96)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:772654 发表于 2020-6-8 11:43 来自手机 | 只看该作者
这个算不算数据采集
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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