共7条
1/1 1 跳转至页
开始
5楼
#include "include/1602.h"
#include < AT89X52.H >
#include < intrins.h >
#define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;
sbit LCD_RS = P2^4 ;
sbit LCD_RW = P2^5 ;
sbit LCD_EN = P2^6 ;
U_8b code MyDef[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};
//P0 为LCD数据口
/******************************************************************/
/*检查LCD忙状态 */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
/******************************************************************/
bit LCD_Busy()
{
bit result ;
LCD_RS = 0 ;
LCD_RW = 1 ;
LCD_EN = 1 ;
delayNOP() ;
result = (bit)(P0&0x80) ;
LCD_EN = 0 ;
return(result) ;
}
void LCD_CMD(U_8b cmd)
{
while(LCD_Busy()) ;
LCD_RS = 0 ;
LCD_RW = 0 ;
LCD_EN = 0;
P0 = cmd ;
delayNOP() ;
LCD_EN = 1 ;
delayNOP() ;
LCD_EN = 0 ;
}
void Init_LCD()
{
delay_ms(15);
LCD_CMD(0x01); //清除LCD的显示内容
LCD_CMD(0x38); //16*2显示,5*7点阵,8位数据
delay_ms(5);
LCD_CMD(0x38);
delay_ms(5) ;
LCD_CMD(0x38);
delay_ms(5);
LCD_CMD(0x0c);
delay_ms(5);
LCD_CMD(0x06);
delay_ms(5);
LCD_CMD(0x01);
delay_ms(5); //地址自增 光标不显示
}
void PutChar(U_8b set_x,U_8b set_y,U_8b LCD_data )
{
while(LCD_Busy()) ;
if (set_y == 0)
{
LCD_CMD((0x80 | set_x));
}else{
LCD_CMD((0xC0 | set_x));
}
while(LCD_Busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = LCD_data;
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
delayNOP();
}
/*自定义字符写入CGRAM */
void LCD_Write_Def()
{
U_8b i;
LCD_CMD(0x40) ; //写CGRAM
for (i = 0 ; i< 8 ; i++)
{
while(LCD_Busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = MyDef[i];
delayNOP() ;
LCD_EN = 1 ;
delayNOP() ;
LCD_EN = 0 ;
}
}
#include < AT89X52.H >
#include < intrins.h >
#define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;
sbit LCD_RS = P2^4 ;
sbit LCD_RW = P2^5 ;
sbit LCD_EN = P2^6 ;
U_8b code MyDef[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};
//P0 为LCD数据口
/******************************************************************/
/*检查LCD忙状态 */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
/******************************************************************/
bit LCD_Busy()
{
bit result ;
LCD_RS = 0 ;
LCD_RW = 1 ;
LCD_EN = 1 ;
delayNOP() ;
result = (bit)(P0&0x80) ;
LCD_EN = 0 ;
return(result) ;
}
void LCD_CMD(U_8b cmd)
{
while(LCD_Busy()) ;
LCD_RS = 0 ;
LCD_RW = 0 ;
LCD_EN = 0;
P0 = cmd ;
delayNOP() ;
LCD_EN = 1 ;
delayNOP() ;
LCD_EN = 0 ;
}
void Init_LCD()
{
delay_ms(15);
LCD_CMD(0x01); //清除LCD的显示内容
LCD_CMD(0x38); //16*2显示,5*7点阵,8位数据
delay_ms(5);
LCD_CMD(0x38);
delay_ms(5) ;
LCD_CMD(0x38);
delay_ms(5);
LCD_CMD(0x0c);
delay_ms(5);
LCD_CMD(0x06);
delay_ms(5);
LCD_CMD(0x01);
delay_ms(5); //地址自增 光标不显示
}
void PutChar(U_8b set_x,U_8b set_y,U_8b LCD_data )
{
while(LCD_Busy()) ;
if (set_y == 0)
{
LCD_CMD((0x80 | set_x));
}else{
LCD_CMD((0xC0 | set_x));
}
while(LCD_Busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = LCD_data;
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
delayNOP();
}
/*自定义字符写入CGRAM */
void LCD_Write_Def()
{
U_8b i;
LCD_CMD(0x40) ; //写CGRAM
for (i = 0 ; i< 8 ; i++)
{
while(LCD_Busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = MyDef[i];
delayNOP() ;
LCD_EN = 1 ;
delayNOP() ;
LCD_EN = 0 ;
}
}
7楼
手机照的,身边没有数码相机!呵呵!
LCD1602上面就是显示了下温度,硬件单片机没有使用STC的我用的是原来剩下的AT89S52单片机。
LCD1602上面就是显示了下温度,硬件单片机没有使用STC的我用的是原来剩下的AT89S52单片机。
共7条
1/1 1 跳转至页
回复
| 有奖活动 | |
|---|---|
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
我要赚赏金打赏帖 |
|
|---|---|
| PTC与NTC功能常规对比被打赏¥14元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于3pin锂电池接口的介绍/使用被打赏¥16元 | |
| 以启明云端ESP32P4开发板实现TF卡读写功能被打赏¥28元 | |
| 【分享开发笔记,赚取电动螺丝刀】树莓派5串口UART0配置被打赏¥25元 | |
| 【STM32F103ZET6】17:分享在Rtos项目中断管理的使用经验被打赏¥23元 | |
| 【STM32F103ZET6】16:分享在中断中恢复串口任务,遇到的问题被打赏¥31元 | |
| 在FireBeetle2ESP32-C5上实现温度大气压检测及显示被打赏¥21元 | |
| 【分享开发笔记,赚取电动螺丝刀】SAME51双串口收发配置被打赏¥27元 | |
| Chaos-nano操作系统在手持式VOC检测设备上的应用被打赏¥37元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于在导入第三方库lib时,wchart类型冲突的原因及解决方案被打赏¥30元 | |
我要赚赏金
