找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请大家帮我看看程序 AD转换的液晶显示 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:296231 发表于 2018-4-1 16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrinS.h>
  3. #include<string.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit ALE=P3^3;
  7. sbit START=P3^3;
  8. sbit OE=P3^5;
  9. sbit EOC=P3^7;
  10. sbit CLK=P3^6;
  11. sbit RS=P2^0;
  12. sbit RW=P2^1;
  13. sbit EN=P2^2;
  14. uchar disp_buf[2][16]=
  15. {
  16. {
  17. "CH0 Volt=0.00V"},
  18. {"CH1 Voit=0.00V"}

  19. };

  20. void delayms(uint t)
  21. {
  22. uint i,j;
  23. for(i=0;j<t;i++);
  24. for(j=0;j<120;j++);

  25. }

  26. void init_t0()
  27. {
  28. TMOD=0x02;
  29. TH0=0x14;
  30. TL0=0x00;
  31. EA=1;
  32. ET0=1;
  33. TR0=1;

  34. }

  35. uchar ad_cov(uchar ch)
  36. {
  37. uchar ad_data;
  38. P3=ch;//kljlll
  39. ALE=1;_nop_();_nop_();ALE=0;
  40. START=1;_nop_();_nop_();START=0;
  41. while(!EOC);
  42. OE=1;
  43. //_nop_();_nop_();_nop_;_nop_();_nop_();_nop_();
  44. ad_data=P1;
  45. OE=0;
  46. return(ad_data);

  47. uchar Busy_Check()   //提示这儿有错误,这是为啥?
  48. {
  49. uchar lcd_status;
  50. RS=0;
  51. RW=1;
  52. EN=1;
  53. delayms(1);
  54. lcd_status=P0;
  55. EN=0;
  56. return(lcd_status);

  57. }

  58. void write_lcd_command(uchar cmd)
  59. {
  60. while (busy_check()&0x80);
  61. RS=0;
  62. RW=0;
  63. EN=0;
  64. P0=cmd;EN=1;delayms(1);EN=0;

  65. }

  66. void write_lcd_data(uchar dat)
  67. {
  68. while ((busy_check()&0x80)==0x80);
  69. RS=1;
  70. RW=0;
  71. EN=0;
  72. P0=dat;EN=1;delayms(1);EN=0;

  73. void init_1602
  74. {
  75. write_lcd_command(0x38);
  76. delayms(1);
  77. write_lcd_command(0x01);
  78. delayms(1);
  79. write_lcd_command(0x06);
  80. delayms(1);
  81. write_lcd_command(0x0c);
  82. delayms(1);

  83. }


  84. void refresh_disp(uchar ch,uchar ad_data)
  85. {
  86. uint t;
  87. t=ad_data*500.0/255;
  88. disp_buf[ch][10]=t/100+0x30;
  89. disp_buf[ch][12]=t/10%10+0x30;
  90. disp_buf[ch][13]=t%10+0x30;
  91. }

  92. main()
  93. {
  94. uchar i,j,k;
  95. init_t0();
  96. init_1602();
  97. while(1)
  98. {
  99. for(i=0;i<2;i++)
  100. {
  101. for(j=0;j<20;j++)
  102. {
  103. refresh_disp(i,ad_cov(i));
  104. write_lcd_command(i==0?0x80:0xc0);
  105. delayms(1);
  106. for(k=0;k<strlen(disp_buf[i]);k++)
  107. {                                 
  108. write_lcd_data(disp_buf[i][k]);
  109. delayms(1);
  110. }
  111. }
  112. }
  113. }

  114. }
  115. }
  116. }
  117.   void intt0() interrupt 1
  118.   {
  119.   CLK=~CLK;
  120.   }
复制代码



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

使用道具 举报

沙发
ID:1 发表于 2018-4-1 20:34 | 只看该作者
什么问题 还电路图 还有芯片型号都不知道  无法帮助 先转走了
回复

使用道具 举报

板凳
ID:287575 发表于 2018-4-1 22:21 | 只看该作者
你的问题是你不认真!
53行84行没有函数的花括号配对,mian()函数后边又多加花括号
定义的是BusyCheck(),后边调用的却是busycheck()
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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