Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1895|回复: 8

20光信本1赵明轩组:电子测距仿真

[复制链接]

1

主题

6

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2022-11-3 13:18:29 | 显示全部楼层 |阅读模式
本帖最后由 纯爱战士 于 2022-11-10 19:32 编辑

仿真负责人:赵明轩   超声波操作人:贺同海   LCD操作人:张凯鹏  实物制作:李彦博,李响
仿真图:


[/code]
代码:
  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define LCD1602_DATAPINS P0
  6. sbit LCD1602_E=P2^2;
  7. sbit LCD1602_RW=P2^1;
  8. sbit LCD1602_RS=P2^0;
  9. sbit Trig = P1^0;
  10. sbit Echo = P1^1;
  11. unsigned long S=0;
  12. bit      flag =0;
  13. unsigned int DIstance,time;


  14. void Lcd1602_Delay1ms(uint c)   //误差 0us
  15. {
  16.     uchar a,b;
  17.         for (; c>0; c--)
  18.         {
  19.                  for (b=199;b>0;b--)
  20.                  {
  21.                           for(a=1;a>0;a--);
  22.                  }      
  23.         }
  24.             
  25. }

  26. void LcdWriteCom(uchar com)          //写入命令
  27. {
  28.         LCD1602_E = 0;     //使能
  29.         LCD1602_RS = 0;           //选择发送命令
  30.         LCD1602_RW = 0;           //选择写入
  31.         
  32.         LCD1602_DATAPINS = com;     //放入命令
  33.         Lcd1602_Delay1ms(1);                //等待数据稳定

  34.         LCD1602_E = 1;                  //写入时序
  35.         Lcd1602_Delay1ms(5);          //保持时间
  36.         LCD1602_E = 0;
  37. }
  38.                               
  39. void LcdWriteData(uchar dat)                        //写入数据
  40. {
  41.         LCD1602_E = 0;        //使能清零
  42.         LCD1602_RS = 1;        //选择输入数据
  43.         LCD1602_RW = 0;        //选择写入

  44.         LCD1602_DATAPINS = dat; //写入数据
  45.         Lcd1602_Delay1ms(1);

  46.         LCD1602_E = 1;   //写入时序
  47.         Lcd1602_Delay1ms(5);   //保持时间
  48.         LCD1602_E = 0;
  49. }

  50.            
  51. void LcdInit()                                                  //LCD初始化子程序
  52. {
  53.          LcdWriteCom(0x38);  //开显示
  54.         LcdWriteCom(0x0c);  //开显示不显示光标
  55.         LcdWriteCom(0x06);  //写一个指针加1
  56.         LcdWriteCom(0x01);  //清屏
  57.         LcdWriteCom(0x80);  //设置数据指针起点
  58. }




  59. //按指定位置显示一个字符
  60. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  61. {
  62. Y &= 0x1;
  63. X &= 0xF; //限制X不能大于15,Y不能大于1
  64. if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
  65. X |= 0x80; // 算出指令码
  66. LcdWriteCom(X); //这里不检测忙信号,发送地址码
  67. LcdWriteData(DData);
  68. }
  69. //按指定位置显示一串字符
  70. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  71. {
  72. unsigned char ListLength;

  73.   ListLength = 0;
  74. Y &= 0x1;
  75. X &= 0xF; //限制X不能大于15,Y不能大于1
  76. while (DData[ListLength]>=0x20) //若到达字串尾则退出
  77.   {
  78.    if (X <= 0xF) //X坐标应小于0xF
  79.     {
  80.      DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
  81.      ListLength++;
  82.      X++;
  83.     }
  84.   }
  85. }

  86. void  StartModule()                          //启动模块
  87. {
  88.           Trig=1;                                             //启动一次模块
  89.           _nop_();
  90.           _nop_();
  91.           _nop_();
  92.           _nop_();
  93.           _nop_();
  94.           _nop_();
  95.           _nop_();
  96.           _nop_();
  97.           _nop_();
  98.           _nop_();
  99.           _nop_();
  100.           _nop_();
  101.           _nop_();
  102.           _nop_();
  103.           _nop_();
  104.           _nop_();
  105.           _nop_();
  106.           _nop_();
  107.           _nop_();
  108.           _nop_();
  109.           _nop_();
  110.           Trig=0;
  111. }
  112. void Conut(void)
  113. {
  114.          StartModule();
  115.          while(!Echo);                //当RX为零时等待
  116.          TR0=1;                            //开启计数
  117.          while(Echo);                        //当RX为1计数并等待
  118.          TR0=0;                                //关闭计数
  119.          time=TH0*256+TL0;
  120.          TH0=0;
  121.          TL0=0;
  122.         
  123.          S=(time*1.7)/100;     //算出来是CM
  124.          DIstance = S;
  125.          if((S>=700)||flag==1) //超出测量范围显示“-”
  126.          {         
  127.           flag=0;
  128.          
  129.           DisplayOneChar(0, 1, '0');
  130.           DisplayOneChar(1, 1, '.');        //显示点
  131.           DisplayOneChar(2, 1, '0');
  132.           DisplayOneChar(3, 1, '0');
  133.           DisplayOneChar(4, 1, 'M');        //显示M
  134.          }
  135.          else
  136.          {
  137.           DisplayOneChar(0, 1, (char)(S/100+'0'));
  138.           DisplayOneChar(1, 1, '.');        //显示点
  139.           DisplayOneChar(2, 1, (char)(S/10%10+'0'));
  140.           DisplayOneChar(3, 1, (char)(S%10+'0'));
  141.           DisplayOneChar(4, 1, 'M');        //显示M
  142.          }
  143. }
  144. void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
  145. {
  146.     flag=1;                                                         //中断溢出标志
  147. }
  148. void Sr04_Init()
  149. {
  150.          TMOD=0x01;                   //设T0为方式1,GATE=1;
  151.          TH0=0;
  152.          TL0=0;         
  153.          ET0=1;             //允许T0中断
  154.          EA=1;                           //开启总中断        
  155. }

  156. void main()
  157. {
  158.         Sr04_Init();
  159.         LcdInit();
  160.         DisplayListChar(0,0,"China No.1");
  161.         while(1)
  162.         {
  163.                 Conut();
  164.         }
  165. }
复制代码

源文件:

目前的进度和遇到的问题:
1.仿真已完成实物未完成
2.问题:液晶屏连接后无法显示



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-4 23:30:49 | 显示全部楼层
干的漂亮
回复

使用道具 举报

1

主题

6

帖子

40

积分

新手上路

Rank: 1

积分
40
 楼主| 发表于 2022-11-10 19:32:28 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-11 17:58:01 | 显示全部楼层
按下述文件修改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

6

帖子

40

积分

新手上路

Rank: 1

积分
40
 楼主| 发表于 2022-11-24 16:50:47 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-24 23:11:55 | 显示全部楼层
再修改下吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

6

帖子

40

积分

新手上路

Rank: 1

积分
40
 楼主| 发表于 2022-11-25 09:55:24 | 显示全部楼层


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

6

帖子

40

积分

新手上路

Rank: 1

积分
40
 楼主| 发表于 2022-11-25 19:01:02 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-26 00:06:51 | 显示全部楼层
看看你目录页的3.2哪里去了? 改完就可以打印了
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-6-8 18:36 , Processed in 0.043084 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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