找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机LCD显示温度日期时间(触摸DS18B20温度产生变化)

[复制链接]
ID:1154198 发表于 2025-6-16 17:44 | 显示全部楼层 |阅读模式
这是在课上要求做的“LCD显示温度日期时间(触摸DS18B20温度产生变化)”,文件中包含程序源代码工程文件和DS18B20的详细介绍
  1. #include "pbdata.h"

  2. #define LCD_DB P0
  3. sbit LCD_EN=P2^7;
  4. sbit LCD_RS=P2^6;
  5. sbit LCD_RW=P2^5;
  6. unsigned char code cg_1602[]={ 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
  7. 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,
  8. 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00};//"ÄêÔÂÈÕ"
  9. void LCDBusy()
  10. {
  11.         unsigned char busy;
  12.         LCD_DB=0xff;
  13.         LCD_RS=0;
  14.         LCD_RW=1;
  15.         do
  16.         {
  17.                 LCD_EN=1;
  18.                 busy=LCD_DB;
  19.                 LCD_EN=0;
  20.         }while(busy & 0x80);
  21. }


  22. void LCDWriteCmd(unsigned char cmd)
  23. {
  24.         //LCDBusy();
  25.         LCD_RW=0;
  26.         LCD_RS=0;
  27.         LCD_EN=1;
  28.         LCD_DB=cmd;
  29.         LCD_EN=0;        
  30.         delay_1ms(1);
  31. }        

  32. void LCDWriteData(unsigned char dat)
  33. {
  34.         //LCDBusy();
  35.         LCD_RW=0;
  36.         LCD_RS=1;
  37.         LCD_EN=1;
  38.         LCD_DB=dat;
  39.         LCD_EN=0;
  40.         delay_1ms(1);
  41. }        


  42. void LCDInit()
  43. {
  44.         LCDWriteCmd(0x38);
  45.         delay_1ms(10);
  46.         LCDWriteCmd(0x0c);
  47.         delay_1ms(10);
  48.         LCDWriteCmd(0x06);
  49.         delay_1ms(10);
  50.         LCDWriteCmd(0x01);
  51.         delay_1ms(10);
  52. }

  53. void LCDSetCursor(unsigned char x,unsigned char y)
  54. {
  55.         unsigned char addr;
  56.         if(y==0)
  57.                 addr=0x00+x;
  58.         else
  59.                 addr=0x40+x;
  60.         LCDWriteCmd(addr | 0x80 );
  61.                
  62. }        

  63. void LCDDisp(unsigned char x,unsigned char y,unsigned char *str)
  64. {
  65.         LCDSetCursor(x,y);
  66.         while(*str!='\0')
  67.         {
  68.                 LCDWriteData(*str++);
  69.         }
  70.                
  71. }        

  72. void LCDDisp_char(unsigned char x,unsigned char y,unsigned char dat)
  73. {
  74.         //LCDInit();
  75.         LCDSetCursor(x,y);
  76.         LCDWriteData(dat);
  77.         
  78. }        

  79. void write_cg()//дÈë¹Ì¶¨ºº×ֺͷûºÅ
  80. {
  81.         unsigned char num;
  82.         LCDWriteCmd(0x40); //É趨CGRAMµØÖ·
  83.         for(num=0;num<24;num++) //½«×Ô¶¨Òå×ÖÐÍÂëдÈëCGRAMÖÐ
  84.         {
  85.                 LCDWriteData(cg_1602[num]);
  86.         }
  87.         LCDWriteCmd(0x84);//Äê
  88.         {
  89.                 LCDWriteData(0);
  90.         }
  91.         LCDWriteCmd(0x87);//ÔÂ
  92.         {
  93.                 LCDWriteData(1);
  94.         }
  95.         LCDWriteCmd(0x8a);//ÈÕ
  96.         {
  97.                 LCDWriteData(2);
  98.         }
  99.         
  100.         LCDDisp(2,1,":");
  101.         LCDDisp(5,1,":");
  102. }


复制代码
原理图: 无
仿真: 无
代码: Keil程序: LCD显示温度日期时间(自己程序).zip (130.76 KB, 下载次数: 0)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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