找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机ADC0832模数转换与显示实例

[复制链接]
跳转到指定楼层
楼主
##ADC0832模数转换与显示##
1602液晶显示的ADC0832模数转换的电路原理图如下:


单片机源程序如下:
  1. #include <reg52.h>   
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define delay4us() {_nop_();_nop_();_nop_();_nop_();}

  6. sbit RS = P2^0;
  7. sbit RW = P2^1;
  8. sbit E  = P2^2;
  9. sbit CS  = P1^0;
  10. sbit CLK = P1^1;
  11. sbit DIO = P1^2;

  12. uchar Display_Buffer[] = "0.00V";
  13. uchar code Line1[] = "Current Voltage:";
  14. void DelayMS(uint ms)  {
  15.          uchar i;
  16.         while(ms--)         {
  17.                  for(i=0;i<120;i++);
  18.         }
  19. }

  20. bit LCD_Busy_Check()  {
  21.          bit result;
  22.         RS = 0;
  23.         RW = 1;
  24.         E  = 1;
  25.         delay4us();
  26.         result = (bit)(P0&0x80);
  27.         E  = 0;
  28.         return result;
  29. }
  30. void LCD_Write_Command(uchar cmd)  {
  31.          while(LCD_Busy_Check());
  32.         RS = 0;
  33.         RW = 0;
  34.         E  = 0;
  35.         _nop_();
  36.         _nop_();
  37.         P0 = cmd;
  38.         delay4us();
  39.         E = 1;
  40.         delay4us();
  41.         E = 0;
  42. }
  43. void Set_Disp_Pos(uchar pos)  {
  44.          LCD_Write_Command(pos | 0x80);
  45. }
  46. void LCD_Write_Data(uchar dat)   {
  47.          while(LCD_Busy_Check());
  48.         RS = 1;
  49.         RW = 0;
  50.         E  = 0;
  51.         P0 = dat;
  52.         delay4us();
  53.         E = 1;
  54.         delay4us();
  55.         E = 0;
  56. }

  57. void LCD_Initialise()  {
  58.         LCD_Write_Command(0x38); DelayMS(1);
  59.         LCD_Write_Command(0x0c); DelayMS(1);
  60.         LCD_Write_Command(0x06); DelayMS(1);
  61.         LCD_Write_Command(0x01); DelayMS(1);
  62. }

  63. uchar Get_AD_Result() {
  64.          uchar i,dat1=0,dat2=0;
  65.         CS  = 0;
  66.         CLK = 0;
  67.         DIO = 1; _nop_(); _nop_();
  68.         CLK = 1; _nop_(); _nop_();
  69.         CLK = 0;DIO = 1; _nop_(); _nop_();
  70.         CLK = 1; _nop_(); _nop_();
  71.         CLK = 0;DIO = 1; _nop_(); _nop_();
  72.         CLK = 1;DIO = 1; _nop_(); _nop_();
  73.         CLK = 0;DIO = 1; _nop_(); _nop_();
  74.         for(i=0;i<8;i++)         {
  75.                  CLK = 1; _nop_(); _nop_();
  76.                 CLK = 0; _nop_(); _nop_();
  77.                 dat1 = dat1 << 1 | DIO;        
  78.         }
  79.         for(i=0;i<8;i++)         {
  80.                  dat2 = dat2 << ((uchar)(DIO)<<i);
  81.                 CLK = 1; _nop_(); _nop_();
  82.                 CLK = 0; _nop_(); _nop_();
  83.         }
  84.         CS = 1;
  85.         return (dat1 == dat2) ? dat1:0;
  86. }

  87. void main()  {
  88.          uchar i;
  89.         uint d;
  90.         LCD_Initialise();
  91.         DelayMS(10);
  92.         while(1)
  93.         {
  94.                  d = Get_AD_Result()*500.0/255;
  95.                 Display_Buffer[0]=d/100+'0';
  96.                 Display_Buffer[2]=d/10%10+'0';
  97.                 Display_Buffer[3]=d%10+'0';
  98.                 Set_Disp_Pos(0x01);
  99.                 i = 0;
  100.                 while(Line1[ i]!='\0')  {
  101.                          LCD_Write_Data(Line1[i+1]);        
  102.                 }
  103.                 Set_Disp_Pos(0x46);
  104.                 i = 0;
  105.                 while(Display_Buffer!='\0')
  106.                 {
  107.                          LCD_Write_Data(Display_Buffer[i+1]);        
  108.                 }
  109.         }
  110. }
复制代码

所有资料51hei提供下载:
51单片机ADC0832模数转换与显示实例.docx (49.45 KB, 下载次数: 106)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:642435 发表于 2019-11-25 23:07 | 只看该作者
仿真LM016L怎么全是uuuuuu
回复

使用道具 举报

板凳
ID:549426 发表于 2020-11-4 20:05 | 只看该作者
要是你打包资料下载就好了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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