12.9 1602液晶简单显示程序

1602 液晶手册提供了一个初始化过程,由于不检测“忙”位,所以程序比较复杂,而我们总结了一个更加简易方便的过程提供给大家,手册上描述的那个,大家仅仅作为了解就可以了,下面我把程序写出来大家看下,我们的初始化只用了 4 条语句,没有像手册介绍的那么繁琐。
   
   
  1. #include <reg52.h>
  2. #define LCD1602_DB P0
  3. sbit LCD1602_RS = P1^0;
  4. sbit LCD1602_RW = P1^1;
  5. sbit LCD1602_E = P1^5;
  6. void InitLcd1602();
  7. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  8. void main(){
  9. unsigned char str[] = "Kingst Studio";
  10. InitLcd1602();
  11. LcdShowStr(2, 0, str);
  12. LcdShowStr(0, 1, "Welcome to KST51");
  13. while (1);
  14. }
  15. /* 等待液晶准备好 */
  16. void LcdWaitReady(){
  17. unsigned char sta;
  18. LCD1602_DB = 0xFF;
  19. LCD1602_RS = 0;
  20. LCD1602_RW = 1;
  21. do {
  22. LCD1602_E = 1;
  23. sta = LCD1602_DB; //读取状态字
  24. LCD1602_E = 0;
  25. }while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止
  26. }
  27. /* 向 LCD1602 液晶写入一字节命令,cmd-待写入命令值 */
  28. void LcdWriteCmd(unsigned char cmd){
  29. LcdWaitReady();
  30. LCD1602_RS = 0;
  31. LCD1602_RW = 0;
  32. LCD1602_DB = cmd;
  33. LCD1602_E = 1;
  34. LCD1602_E = 0;
  35. }
  36. /* 向 LCD1602 液晶写入一字节数据,dat-待写入数据值 */
  37. void LcdWriteDat(unsigned char dat){
  38. LcdWaitReady();
  39. LCD1602_RS = 1;
  40. LCD1602_RW = 0;
  41. LCD1602_DB = dat;
  42. LCD1602_E = 1;
  43. LCD1602_E = 0;
  44. }
  45. /* 设置显示 RAM 起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */
  46. void LcdSetCursor(unsigned char x, unsigned char y){
  47. unsigned char addr;
  48. if (y == 0){ //由输入的屏幕坐标计算显示 RAM 的地址
  49. addr = 0x00 + x; //第一行字符地址从 0x00 起始
  50. }else{
  51. addr = 0x40 + x; //第二行字符地址从 0x40 起始
  52. }
  53. LcdWriteCmd(addr | 0x80); //设置 RAM 地址
  54. }
  55. /* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */
  56. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){
  57. LcdSetCursor(x, y); //设置起始地址
  58. while (*str != '\0'){ //连续写入字符串数据,直到检测到结束符
  59. LcdWriteDat(*str++); //先取 str 指向的数据,然后 str 自加 1
  60. }
  61. }
  62. /* 初始化 1602 液晶 */
  63. void InitLcd1602(){
  64. LcdWriteCmd(0x38); //16*2 显示,5*7 点阵,8 位数据接口
  65. LcdWriteCmd(0x0C); //显示器开,光标关闭
  66. LcdWriteCmd(0x06); //文字不动,地址自动+1
  67. LcdWriteCmd(0x01); //清屏
  68. }
程序中有详细的注释,结合本节前面的讲解,大家自己分析下,掌握 1602 液晶的基本操作函数。LcdWriteDat(*str++)这行语句中对指针 str 的操作大家一定要理解透彻,先把 str指向的数据取出来用,然后 str 再加 1 以指向下一个数据,这是非常常用的一种简写方式。另外关于本程序还有几点值得提一下:
  • 首先,我们把程序所有的功能都使用函数模块化了,这样非常有利于程序的维护,不管要写一个什么样的功能,只要调用相应的函数就可以了,大家注意学习这种编程方法。
  • 其次,我们使用液晶的习惯,也是用数学上的(x,y)坐标来进行屏幕定位,但与数学坐标系不同的是,液晶的左上角的坐标是 x=0,y=0,往右边是 x+偏移,下边是 y+偏移。
  • 第三,第一次接触多个参数传递的函数,而且还带了指针类型的参数,所以多留心熟悉一下。
  • 第四,读写数据和指令程序,每次都必须进行“忙”判断。
  • 第五,领略一下指针在这个地方的巧妙用法,你可以尝试不用指针改写程序试试,感受一下指针的优势。
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CPLEX 12.9 是一个优化求解器,用于解决线性规划、整数规划、二次规划等数学优化问题。它基于高效的算法和先进的求解技术,能够处理大规模的问题并提供高质量的解决方案。 CPLEX 12.9 提供了丰富的功能和特性,可以有效地利用计算资源来解决复杂的优化问题。它支持多种编程接口和文件格式,使得用户可以方便地与不同的应用程序和环境集成。同时,CPLEX 12.9 还提供了直观的图形界面,用户可以可视化地设置和调整问题参数,并实时查看求解过程和结果。 CPLEX 12.9 具有高度的可扩展性和灵活性。它支持并行计算和分布式计算,可以利用多核和多台计算机的资源来加速求解过程。此外,它还提供了多种求解策略和启发式方法,用户可以根据问题的特点进行调整和优化,以获得更好的性能和解决方案。 CPLEX 12.9 的资源需求较低。它运行在常见的操作系统上,如Windows、Linux和Mac OS,可以在个人计算机、集群和云平台上运行。它对硬件的要求较低,可以在普通的计算机上进行求解,同时具有高效的内存管理和算法实现,能够有效地利用有限的资源来解决大规模问题。 综上所述,CPLEX 12.9 是一款功能强大且资源需求较低的优化求解器,可以广泛应用于各种领域,如物流、生产调度、金融投资等,帮助用户优化决策并提升效益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值