找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1919|回复: 0
收起左侧

用proteus仿真基于51单片机的倒车雷达 LCD没显示是什么情况呀 求帮助

[复制链接]
ID:573176 发表于 2019-6-28 14:44 | 显示全部楼层 |阅读模式
微信图片_20190628144304.png

单片机源程序如下:
  1. #include<stc15f2k60s2.h>
  2. #include<intrins.h>
  3. #include"lcd.h"
  4. sbit Trig = P3^2;
  5. sbit Echo = P3^3;
  6. sbit beep=P1^4;
  7. unsigned char PuZh[]="distance is ";
  8. unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
  9. static unsigned char DisNum = 0;
  10.        unsigned int  time=0;
  11.     unsigned long S=0;
  12.     bit      flag =0;
  13.     unsigned char disbuff[4]    ={ 0,0,0,0,};
  14. void Conut(void)
  15. {
  16.   time=TH0*256+TL0;
  17.   TH0=0;
  18.   TL0=0;

  19.   S=(time*1.7)/100;     
  20.   if((S>=700)||flag==1)
  21.   {  
  22.    flag=0;
  23.   
  24.    DisplayOneChar(11, 0, ASCII[11]);
  25.    DisplayOneChar(12, 0, ASCII[10]);
  26.    DisplayOneChar(13, 0, ASCII[11]);
  27.    DisplayOneChar(14, 0, ASCII[11]);
  28.    DisplayOneChar(15, 0, ASCII[12]);
  29.   }
  30.   else
  31.   {
  32.    disbuff[0]=S%1000/100;
  33.    disbuff[1]=S%1000%100/10;
  34.    disbuff[2]=S%1000%10 %10;
  35.    DisplayOneChar(11, 0, ASCII[disbuff[0]]);
  36.    DisplayOneChar(12, 0, ASCII[10]);
  37.    DisplayOneChar(13, 0, ASCII[disbuff[1]]);
  38.    DisplayOneChar(14, 0, ASCII[disbuff[2]]);   
  39.    DisplayOneChar(15, 0, ASCII[12]);
  40.   }
  41. }
  42. void zd0() interrupt 1   
  43.   {
  44.     flag=1;                                                                                                                                                                                          
  45.   }
  46. void  StartModule()            
  47.   {
  48.    Trig=1;                        
  49.    _nop_();
  50.    _nop_();
  51.    _nop_();
  52.    _nop_();
  53.    _nop_();
  54.    _nop_();
  55.    _nop_();
  56.    _nop_();
  57.    _nop_();
  58.    _nop_();
  59.    _nop_();
  60.    _nop_();
  61.    _nop_();
  62.    _nop_();
  63.    _nop_();
  64.    _nop_();
  65.    _nop_();
  66.    _nop_();
  67.    _nop_();
  68.    _nop_();
  69.    _nop_();
  70.    Trig=0;
  71.   }

  72. void delayms(unsigned int ms)
  73. {
  74. unsigned char i=100,j;
  75. for(;ms;ms--)
  76. {
  77.   while(--i)
  78.   {
  79.    j=10;
  80.    while(--j);
  81.   }
  82. }
  83. }
  84. void main(void)
  85. {
  86.   TMOD=0x01;     
  87.   TH0=0;
  88.   TL0=0;         
  89.   ET0=1;            
  90.   EA=1;      
  91. InitLcd1602();
  92. LcdShowStr(0,0,PuZh);
  93. while(1)
  94. {
  95.   
  96.    StartModule();
  97.       while(!Echo);  
  98.       TR0=1;      
  99.       while(Echo);   
  100.       TR0=0;   
  101.          Conut();   
  102.    delayms(80);
  103.   if(S<20)
  104.   {
  105.      beep=0;
  106.   }
  107. }
  108.    
  109. }



  110. #include"lcd.h"

  111. void Read_Busy()           
  112. {
  113.     unsigned char sta;      
  114.     LCD1602_DB = 0xff;
  115.     LCD1602_RS = 0;
  116.     LCD1602_RW = 1;
  117.     do
  118.     {
  119.         LCD1602_EN = 1;
  120.         sta = LCD1602_DB;
  121.         LCD1602_EN = 0;   
  122.     }while(sta & 0x80);
  123. }
  124. void Lcd1602_Write_Cmd(unsigned char cmd)     
  125. {
  126.     Read_Busy();
  127.     LCD1602_RS = 0;
  128.     LCD1602_RW = 0;
  129.     LCD1602_DB = cmd;
  130.     LCD1602_EN = 1;
  131.     LCD1602_EN = 0;   
  132. }
  133. void Lcd1602_Write_Data(unsigned char dat)   
  134. {
  135.       Read_Busy();
  136.       LCD1602_RS = 1;
  137.       LCD1602_RW = 0;
  138.       LCD1602_DB = dat;
  139.       LCD1602_EN = 1;
  140.       LCD1602_EN = 0;
  141. }
  142. void LcdSetCursor(unsigned char x,unsigned char y)  
  143. {
  144.     unsigned char addr;
  145.     if(y == 0)
  146.         addr = 0x00 + x;
  147.     else
  148.         addr = 0x40+ x;
  149.    
  150.     Lcd1602_Write_Cmd(addr|0x80);
  151. }
  152. //°′???¨??????ê?ò???×?
  153. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  154. {
  155. Y &= 0x1;
  156. X &= 0xF;
  157. if (Y) X |= 0x40;
  158. X |= 0x80;
  159. Lcd1602_Write_Cmd(X);
  160. Lcd1602_Write_Data(DData);
  161. }

  162. void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str)     
  163. {
  164.     LcdSetCursor(x,y);      
  165.     while(*str != '\0')
  166.     {
  167.         Lcd1602_Write_Data(*str++);
  168.     }
  169. }
  170. void InitLcd1602()              
  171. {
  172.     Lcd1602_Write_Cmd(0x38);   
  173.     Lcd1602_Write_Cmd(0x0c);
  174.     Lcd1602_Write_Cmd(0x06);
  175.     Lcd1602_Write_Cmd(0x01);   
  176. }



复制代码




回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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