生活随笔
收集整理的這篇文章主要介紹了
LCD1602动态显示
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
仿真元原理圖如下:
/*-------------------------------------
功能:LCD1602局部動態(tài)顯示
描述:在屏幕的第二行固定位置顯示count:
后面接著動態(tài)顯示按鍵次數(shù)(00 ~ 99)
Author: Zhang Kaizhou
Date: 2019-6-5 10:50:22
-------------------------------------*/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned intuchar code table0[] = {"Press time"}; // 每行的字符數(shù)據(jù)
uchar code table1[] = {"Count:00"};
uchar code table2[] = {"0123456789"};
sbit lcdrs = P1^2; // LCD數(shù)據(jù)/命令選擇端
sbit lcdrw = P1^3; // LCD讀寫選擇端
sbit lcden = P1^4; // LCD使能端,高脈沖有效
sbit k1 = P1^5;
uchar num, ge = 0, shi = 0;void init();
void displayInit();
void keyScan();
void writeCommand(uchar command);
void delay(uchar xms);
void writeData(uchar dat);void main()
{init();displayInit();while(1){ keyScan();}
}/*初始化LCD1602的設(shè)置*/
void init()
{lcden = 0; // 拉低使能端,準(zhǔn)備產(chǎn)生使能高脈沖信號writeCommand(0x38); // 顯示模式設(shè)置(16x2, 5x7點陣,8位數(shù)據(jù)接口)writeCommand(0x0c); // 開顯示,不顯示光標(biāo)writeCommand(0x06); // 寫一個字符后地址指針自動加1writeCommand(0x01); // 顯示清零,數(shù)據(jù)指針清零
}/*LCD上電界面*/
void displayInit()
{writeCommand(0x80); // 將數(shù)據(jù)指針定位到第一行首for(num = 0; num < strlen(table0); num++){writeData(table0[num]);delay(5);}writeCommand(0x80 + 0x40); // 將數(shù)據(jù)指針定位到第二行首for(num = 0; num < strlen(table1); num++){writeData(table1[num]);delay(5);}
}/*按鍵掃描*/
void keyScan()
{writeCommand(0x80 + 0x40 + strlen(table1) - 0x01);if(!k1){delay(5);if(!k1){ while(!k1);ge++;if(ge == 10){ge = 0;shi++;if(shi == 10){shi = 0;displayInit();}else{writeCommand(0x80 + 0x40 + strlen(table1) - 0x02);writeData(table2[shi]);writeCommand(0x80 + 0x40 + strlen(table1) - 0x01);writeData(table2[ge]);}}else{writeData(table2[ge]);}}}
}/*寫指令函數(shù)*/
void writeCommand(uchar command)
{lcdrs = 0; // 命令選擇lcdrw = 0;P0 = command;delay(5);lcden = 1; // 產(chǎn)生一個正脈沖使能信號delay(5);lcden = 0;
}/*寫數(shù)據(jù)函數(shù)*/
void writeData(uchar dat)
{lcdrs = 1; // 數(shù)據(jù)選擇lcdrw = 0;P0 = dat;delay(5);lcden = 1;delay(5);lcden = 0;
}/*延時函數(shù)*/
void delay(uchar xms)
{uint i, j;for(i = xms; i > 0; i--)for(j = 110; j > 0; j--);
}
總結(jié)
以上是生活随笔為你收集整理的LCD1602动态显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。