单片机
返回首页

《逗比小憨憨51单片机Proteus仿真系列》第17期基于51单片机+LCD1602的简易计数器设计

2025-10-09 来源:bilibili

源代码:

#include <reg51.h>

#include <intrins.h>

sbit LcdRs = P2^0;

sbit LcdRw = P2^1;

sbit LcdEn  = P2^2;

sfr  DBPort = 0x80;

#define LCD_SHOW 0x04    

#define LCD_HIDE 0x00      

#define LCD_CURSOR 0x02

#define LCD_NO_CURSOR 0x00         

#define LCD_AC_UP 0x02

#define LCD_AC_DOWN 0x00     

#define LCD_MOVE 0x01      

#define LCD_NO_MOVE 0x00   

#define LCD_FLASH 0x01    

#define LCD_NO_FLASH 0x00    

#define LCD_COMMAND 0     

#define LCD_DATA 1      

#define LCD_CLEAR_SCREEN 0x01     

#define LCD_HOMING  0x02      

unsigned char LCD_Wait(void)

{

LcdRs=0;

LcdRw=1;

_nop_();

LcdEn=1;

_nop_();

LcdEn=0;

return DBPort;

}

void LCD_Write(bit style, unsigned char input)

{

LcdEn=0;

LcdRs=style;

LcdRw=0;

_nop_();

DBPort=input;

_nop_();

LcdEn=1;

_nop_();

LcdEn=0;

_nop_();

LCD_Wait();

}

void LCD_SetDisplay(unsigned char DisplayMode)

{

LCD_Write(LCD_COMMAND, 0x08|DisplayMode);

}

void LCD_SetInput(unsigned char InputMode)

{

LCD_Write(LCD_COMMAND, 0x04|InputMode);

}

void LCD_Initial(void)

{

LcdEn=0;

LCD_Write(LCD_COMMAND,0x38);         

LCD_Write(LCD_COMMAND,0x38);

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);  

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);      

}

void GotoXY(unsigned char x, unsigned char y)

{

if(y==0)

LCD_Write(LCD_COMMAND,0x80|x);

if(y==1)

LCD_Write(LCD_COMMAND,0x80|(x-0x40));

}

void Print(unsigned char *str)

{

while(*str!='')

{

LCD_Write(LCD_DATA,*str);

str++;

}

}

unsigned char TempBuffer[10];

void IntToStr(unsigned int t, unsigned char *str, unsigned char n) 

{

unsigned char a[5]; char i, j;                                 

a[0]=(t/10000)%10;               

a[1]=(t/1000)%10;                                     

a[2]=(t/100)%10;                                     

a[3]=(t/10)%10;                                       

a[4]=(t/1)%10;                                       

                                                      

for(i=0; i<5; i++)               

a[i]=a[i]+'0';                                   

for(i=0; a[i]=='0' && i<=3; i++);                     

for(j=5-n; j<i; j++)                       

{ *str=' ';  str++; }                             

for(; i<5; i++)                                       

{ *str=a[i]; str++; }           

*str=''; 

void Delay1ms(unsigned int count)

{

unsigned int i,j;

for(i=0;i<count;i++)

for(j=0;j<120;j++);

}

void main(void)

{

unsigned int Count = 0;

LCD_Initial();

GotoXY(0,0);

Print("The LCD1602 Test");

GotoXY(0,1);

Print("@");

while(1)

{

IntToStr(Count++,&TempBuffer[0],5);

GotoXY(3,1);

Print(&TempBuffer[0]);

Delay1ms(100);

}

}


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 1瓦四级调频发射机

  • 500W MOS场效应管电源逆变器,12V转110V/220V

  • 红外开关

  • LM317过压保护

  • 0-30V/20A 大功率稳压电源(采用LM338)

    相关电子头条文章