找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C51单片机ADC0804模拟转换Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
终于把这个模拟给做出来了,体会到了怎么去发现坑,学着去填坑,仿真文件供大家参考,谢谢。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


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

  3. //利用_nop_()的等待命令

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit adwr=P3^2;
  7. sbit adrd=P3^1;
  8. sbit CS=P3^0;
  9. sbit INTR=P3^3;


  10. uchar num;
  11. uchar code display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  12. //共阳极数码管的显示代码

  13. uchar COM[]={0x01,0x02,0x04,0x08};
  14. //数码管的位选代码

  15. uchar num, num2=0,time[4]={0,0,0,0},val;
  16. float val2;
  17. unsigned int val3;


  18. main()
  19. {
  20. //使用定时器0定时对结果扫描显示
  21. TMOD=0x01;  //定时器的工作方式1
  22. TH0=(65536-917)/256;        //定时定义初值       
  23. TL0=(65536-917)%256;               
  24. EA=1;         //总中断使能打开
  25. ET0=1;        //定时器0中断
  26. TR0=1;       //定时器0启动

  27. CS=0; // 启动转换
  28. while(1)
  29. //此处循环等待时间到中断
  30. {
  31. adwr=1;
  32. _nop_();
  33. adwr=0;
  34. _nop_();
  35. adwr=1;


  36. INTR=0;//intr转换完成后自动拉低


  37. //当只有一片AD芯片时,可以将CS一直处在低位即可,连续转换

  38. adrd=1;
  39. _nop_();

  40. adrd=0;
  41. _nop_();

  42. val=P1;
  43. adrd=1;
  44. val2=((val*1.0/255)*5.0);//将数字量转换为数值。
  45. val3=val2*1000;//将转化的数值放大后,分别其对应位的值
  46. time[0]=val3/1000;//个位
  47. time[1]=val3%1000/100;//个分位
  48. time[2]=val3%100/10;//十分位
  49. time[3]=val3%10;//千分位

  50. }

  51. }


  52. void Timer_0()  interrupt 1
  53. {

  54.         TH0=(65536-917)/256;        //中断后计数器重新赋值       
  55.         TL0=(65536-917)%256;

  56.         num++;
  57.         if (num==10)
  58.                 {num=0;

  59.                 P2=COM[num2];//取反后,位选数码管全部熄灭
  60. //共阳极数码管时,高电平选通,低电平关闭

  61.                 P0=0xff;//数码管全部低电平,熄灭

  62.                 {
  63.                 if(num2==0)
  64.                         {P0=display[time[num2]]&0x7F;}  //显示带小数点的个位数

  65.                 else
  66.                         {P0=display[time[num2]];}   
  67.                          }
  68.                 num2++;                              
  69.                 if(num2>=4) num2=0;

  70.         }

  71. }
复制代码

所有资料51hei提供下载:
02_ADC转换.zip (89.66 KB, 下载次数: 40)



评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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