如题,关于51单片机开发板的一些,大概就是使用红外控制开发板在lcd1602上实现一些功能,显示温度时间,以及播放音乐这些简单功能,单片机型号是hc6800,能做的滴我
1条回答 默认 最新
关注【相关推荐】
- 建议你看下这篇博客👉 :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); } }
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报