網(wǎng)上有很多關于pos機51錯誤碼,簡單復制粘貼代碼讓LCD1602顯示字符的知識,也有很多人為大家解答關于pos機51錯誤碼的問題,今天pos機之家(m.afbey.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機51錯誤碼
總結下自己學習遇到的情況:1.每天學習點少量的新知識覺得心情愉悅 2.新知識的量>自己接受的承受范圍,就覺得很糟糕。不知不覺地就有抵觸學習的意識,越要強迫自己學,放棄得越快,放棄了,過一段時間還想學,但隨著時間流逝前面知識忘得差不多了,然后又重新學,周而復始浪費了大量時間。人最大的敵人還是自己啊,克服壞毛病,永遠不要放棄,只要堅持你有能力做任何你能想象的事情,重拾自我從今天開始做起....
液晶Lcd1602顯示字符做到只要能顯示字符就行,第一次看驅動文件和原理看的頭蒙,先會用就行。
LCD1602是一個有16引腳的字符液晶屏。8個數(shù)據(jù)引腳(D0-D7)和3個控制引腳(RS,RW,EN)。其余5個引腳用于LCD的電源和背光。
屏幕可以顯示2行,每行可以顯示16個字符。每個字符由5x8(列x行)像素矩陣組成。
自己遇到的一些問題
1._nop()_是intrins頭文件的里單周期空語句,可是實現(xiàn)極短延時。nop表示空循環(huán)一個機器指令的時間,一個nop延時多少根據(jù)晶振所定,12M中表示1us
1S=1000ms(毫秒)=1000 000us(微妙)。1us(毫秒)=1000ns(納秒)
是LCD1602的速度是納秒級別的,而51單片機是毫秒級別的,所以基本不需要讀取 忙標志,只要微延時就行了,proteus仿真軟件不支持判忙函數(shù)
void lcd1602CheckBusy()//判忙函數(shù){ DPORT = 0xff;RS=0;RW=1;E=1;while(DPORT&0x80);E=0;}
2.稍微了解下LCD1602常用的一些命令,再看LCD1602初始化代碼不會這么懵了
常用的LCD1602命令
3.Proteus中學會使用終端符號
兩個引腳不用連線也能導通方法:兩端要加上終端符號,然后再終端上加上網(wǎng)絡標號,要連在一起的兩個終端必須有相同的網(wǎng)絡標號
模塊化編程思想先學會抄作業(yè),了解如何模塊化編程
固定格式條件預編譯
把LCD1602驅動代碼導入到工程中仿真軟件效果完整的驅動代碼delay.h
#ifndef _DELAY_H_#define _DELAY_H_void DelayUs2x(unsigned char t);void delayNms(unsigned char t);#endif
delay.c
void DelayUs2x(unsigned char t){ while(--t);}/*------------------------------------------------ mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0~255 這里使用晶振12M,精確延時請使用匯編------------------------------------------------*/void delayNms(unsigned char t){ while(t--) { //大致延時1mS DelayUs2x(245); DelayUs2x(245); }}
lcd1602.h
#ifndef _LCD1602_H_#define _LCD1602_H_#include<reg51.h>#include<intrins.h>#include "delay.h" //請根據(jù)晶振自行編寫延時函數(shù)#define DPORT P0 // D0-D7根據(jù)實際硬件連接修改sbit RS = P1^7; // 根據(jù)實際硬件連接修改sbit RW = P1^6; // 根據(jù)實際硬件連接修改sbit E = P1^5; // 根據(jù)實際硬件連接修改void lcd1602WriteCmd(unsigned char cmd); //寫命令函數(shù)void lcd1602WriteByte(unsigned char dat);//寫數(shù)據(jù)函數(shù)void lcd1602Init(); // 初始化函數(shù)void lcd1602WritePos(unsigned char xPos,unsigned char yPos);void lcd1602WriteChar(unsigned char xPos,unsigned char yPos,unsigned char Dat); // 寫1個字符void lcd1602WriteString(unsigned char xPos,unsigned char yPos,unsigned char *s); // 寫字符串#endif
lcd1602.c
#include "lcd1602.h"void lcd1602WriteByte(unsigned char dat)//寫數(shù)據(jù)函數(shù){delayNms(5);//判忙函數(shù)不支持proteus,延時5msRS=1;//將RS引腳設為高電平,RS = 1(寫數(shù)據(jù)模式)RW=0;//將RW引腳設為低電平,RW = 0(寫操作模式)DPORT=dat;// 將待寫數(shù)據(jù)送到數(shù)據(jù)端口(D0-D7)E=1; //使能脈沖,LCD鎖存D0至D7處的數(shù)據(jù)并執(zhí)行命令_nop_();//短暫延時1個機器周期1us左右_nop_();E=0; //關閉使能釋放總線}void lcd1602WriteCmd(unsigned char cmd) //寫命令函數(shù){delayNms(5);//判忙函數(shù)不支持proteus,延時5msRS=0;//將RS引腳設為低電平,RS = 0(寫命令模式)RW=0;//將RW引腳設為低電平,RW = 0(寫操作模式)DPORT=cmd;// 將待寫數(shù)據(jù)送到數(shù)據(jù)端口(D0-D7)E=1; //使能脈沖,LCD鎖存D0至D7處的數(shù)據(jù)并執(zhí)行命令_nop_();// 短暫延時1個機器周期1us左右 _nop_();E=0; //關閉使能釋放總線} void lcd1602Init() // LCD1602 初始化函數(shù) {delayNms(20); /*LCD1602的上電初始化時間大約15ms */lcd1602WriteCmd(0x38); /*設置2行,5x8矩陣,8位模式*/ lcd1602WriteCmd(0x0c); //顯示打開,光標關閉lcd1602WriteCmd(0x06); //數(shù)據(jù)從左到右以遞增順序寫入lcd1602WriteCmd(0x01);//清屏耗時比較長需要2ms左右,別的命令以nm為單位delayNms(5); }// 內部函數(shù)用于設置顯示字符起始坐標void lcd1602WritePos(unsigned char xPos,unsigned char yPos) {unsigned char tmp;xPos&=0x0f; // x位置范圍是0~15yPos&=0x01; // y位置范圍是0~1if(yPos==0) // 顯示第一行tmp=xPos; // 第一行字符地址從 0x00 開始elsetmp=xPos+0x40; // 第二行字符地址從 0x40 開始lcd1602WriteCmd(tmp|0x80);//設置 RAM 寫入的地址}//在指定的行與列顯示指定的字符,xpos:行,ypos:列,c:待顯示字符void lcd1602WriteChar(unsigned char xPos,unsigned char yPos,unsigned char Dat){lcd1602WritePos(xPos,yPos);lcd1602WriteByte(Dat);}// 在液晶上顯示字符串,xpos:行坐標,ypos:列坐標,str-字符串指針void lcd1602WriteString(unsigned char xPos,unsigned char yPos,unsigned char *s){unsigned char i=0;lcd1602WritePos(xPos,yPos); // 起始坐標while(s[i]){lcd1602WriteByte(s[i]);i++;if (i>=16) break; // 超出16個字符外的數(shù)據(jù)丟棄}}
main.c
#include<reg51.h>#include"lcd1602.h"void main(){lcd1602Init();lcd1602WriteChar(7,0,'H');lcd1602WriteChar(8,0,'i');lcd1602WriteString(3,1,"2021-03-07");while(1);}
以上就是關于pos機51錯誤碼,簡單復制粘貼代碼讓LCD1602顯示字符的知識,后面我們會繼續(xù)為大家整理關于pos機51錯誤碼的知識,希望能夠幫助到大家!
![](/style/images/zhouzong.jpg)