找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机ADC0809电压显示,包含仿真图,源程序

[复制链接]
跳转到指定楼层
楼主
这是我做的电压显示,附件包含仿真图,源程序,花了不少时间,都是自己原创的,希望大家多多指教

ADC0809仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


ADC0809单片机源码:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<math.h>
  4. typedef unsigned char uchar;
  5. typedef unsigned int uint;
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. float getdata;
  9. float x;
  10. uint temp;
  11. uchar dispbuf[8]={10,10,10,10,10,0,0,0};
  12. uchar*p="0123456789";
  13. uchar code table[]="20141547YSH";
  14. uchar num;
  15. sbit ST=P2^0;
  16. sbit OE=P2^2;
  17. sbit EOC=P2^1;
  18. sbit CLK=P2^4;
  19. sbit rs=P3^5;
  20. sbit e=P3^4;
  21. void delay(uint z)
  22. {
  23.     uint x,y;
  24.     for(x=0;x<z;x++)
  25.       for(y=0;y<110;y++);
  26. }

  27. void write_com(uchar com)//写指令函数
  28. {
  29. rs=0;//选择写命令模式

  30. P0=com;//将要写的命令字送到数据总线上
  31. delay(5);
  32. //使能端给一高脉冲,因为初始化函数中将e置零
  33. e=1;
  34. delay(5);
  35. e=0;//将使能端置0以完成高脉冲
  36. }
  37. void write_data(uchar dat)//写数据函数
  38. {
  39. rs=1;//选择写数据命令模式
  40. P0=dat;
  41. delay(5);
  42. e=1;
  43. delay(5);
  44. e=0;
  45. }
  46. void init()//初始化函数
  47. {
  48. e=0;
  49. write_com(0x38);//设置8位格式 两行
  50. write_com(0x0c);//整体显示 关光标 不闪烁
  51. write_com(0x06); //设置输入方式 增量不移位
  52. write_com(0x01); //清屏
  53. }
  54. void main()
  55. {
  56. init();
  57. ST=0;
  58. OE=0;
  59. ET0=1; //允许定时器计时器0中断
  60. EA=1; //打开中断总开关
  61. TMOD=0x12;
  62. TH0=246;
  63. TL0=226;
  64. TR0=1; //定时器0运行控制位,当软件清0时,关闭定时器0
  65. ST=0;
  66. while(1)
  67. {
  68. write_com(0x80);
  69.    for(num=0;num<11;num++)
  70.    {
  71.       write_data(table[num]);
  72.       delay(5);
  73.     }
  74. {
  75. uchar i;
  76. if(EOC==1)
  77. {
  78. OE=1;
  79. getdata=P1;
  80. OE=0;
  81. //AD转换:255/5=实(AD)/输出
  82. if (getdata>127)
  83. {
  84.   write_com(0x80+0x40);
  85.   temp=(getdata-127)*10/255*100;
  86.   write_data('+');
  87.   write_data(p[temp/100]);//输出整数位
  88.   write_data('.'); //输出小数点
  89.   write_data(p[temp/10%10]);
  90.   write_data(p[temp%10]);
  91.   write_data('V');
  92.   write_data(table[num]);
  93. }
  94. else
  95. {
  96. write_com(0x80+0x40);
  97. temp=(127-getdata)*10/255*100+3;
  98. write_data('-');
  99. write_data(p[temp/100]);//输出整数位
  100. write_data('.'); //输出小数点
  101. write_data(p[temp/10%10]);
  102. write_data(p[temp%10]);
  103. write_data('V');
  104. write_data(table[num]);
  105. }
  106. ST=1;
  107. ST=0;
  108. }
  109. delay(200);
  110. }
  111. //write_com(0x01);
  112. }
  113. }
  114. Voidtime0(void) interrupt 1 using 0//定时器计数器0
  115. {
  116. CLK=~CLK;
  117. }
复制代码
全部资料51hei下载地址:
电压显示.zip (70.68 KB, 下载次数: 189)



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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