2201_76062986 2023-11-26 19:04 采纳率: 0%
浏览 4

找51单片机开发板代做

如题,关于51单片机开发板的一些,大概就是使用红外控制开发板在lcd1602上实现一些功能,显示温度时间,以及播放音乐这些简单功能,单片机型号是hc6800,能做的滴我

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-26 20:09
    关注

    【相关推荐】



    • 建议你看下这篇博客👉 :51单片机lcd1602实验(单片机的模拟电话拨号)
    • 除此之外, 这篇博客: 有距离与时间显示并实现避障的51循迹小车中的 3、LCD1602的使用与时钟和测距的实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      测距的实现,测距我们是使用了码盘和计数传感器(类似于光电门的设备),原理就是通过外部中断,记录通过码盘上孔的次数,然后再根据转一周孔的数量和轮胎的直径计算行驶距离(所以在设计转弯的时候我们一开始是很不情愿使用两侧轮胎反向的,对精度有影响),为了更加准确我们使用了两个这样的装置,给两个后轮装上,然后计算平均值。

      u16 num=0,number=0;//码盘计数
      
      void exit0_init()//外部中断0
      {
        IT0=1;
        PX0=1;
        EX0=1;
      }
      
      void exit0() interrupt 0
      {
         num++;
      }
      
      void exit1_init()//外部中断1
      {
        IT1=1;
        PX1=1;
        EX1=1;
      }
      
      void exit1() interrupt 2
      {
        number++;
      }
      
      u16 count()
      {
        	u16 Distance=0;//LCD显示实数太麻烦了,并且精度应该也没那么高,所以就干脆用整型
      	float k=0;
      	k=(num+number)/2.0;//求平均
      	Distance=k/20.0*6.6*3.1415926;
      	return Distance;	
      }
      

      运行时间的测算就比较简单了,计时器的简单应用就不多做介绍了。

      void timer0_on() //定时器0启动 设置200us 8位自动重装
      {
      	TMOD|=0x02;
      	TH0=72;
      	TL0=72;
      	ET0=1;
      	TR0=1;                                                                                                                                                                                                                                                                                                                                 
      }
      
      void time() interrupt 1
      {
      	times++;
      	if(times==5000)
      	{
      	 	if(min==99&&s==59){min=0;s=0;}
      		else if(s==59){min++;s=0;}
      			 else s++; 	
      		times=0;
      	}
      							            
      }
      

      LCD1602的使用我们是学习了b站上江科大自化协的视频,我51单片机业主要是看他的视频学习的,大佬的讲解真的十分细致啊,再次感谢大佬的分享。(这里有一点注意,自己买的51单片机最小系统上的I/O口和大佬提供程序里的定义可能不一样,要自己对照原理图修改一下)LCD1602的程序是直接写在主函数的。

      void main()
      {
      	u16 k=0;
      	EA_on;
      	LCD_Init();
      	timer0_on();
      	exit1_init();
      	exit0_init();
      	LCD_ShowString(1,1,"Time:  min  s");
      	LCD_ShowString(2,1,"Distance:     cm");	
        	while(1)
      	{
      		U_wave_control();delay1ms(30);//建议是超声波发射之间的时间达到六十毫秒,考虑到计时器用的时间和LCD用的时间,就只取了一半,不过现在来看还挺正常的(有时确实有点问题)	
      		LCD_ShowNum(1,6,min,2);
      		LCD_ShowNum(1,11,s,2);
      		LCD_ShowNum(2,10,count(),5);	
      	}
      }
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月26日