pos機(jī)51錯誤碼,簡單復(fù)制粘貼代碼讓LCD1602顯示字符

 新聞資訊2  |   2023-05-27 09:42  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)51錯誤碼,簡單復(fù)制粘貼代碼讓LCD1602顯示字符的知識,也有很多人為大家解答關(guān)于pos機(jī)51錯誤碼的問題,今天pos機(jī)之家(www.dprolou.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機(jī)51錯誤碼

pos機(jī)51錯誤碼

總結(jié)下自己學(xué)習(xí)遇到的情況:1.每天學(xué)習(xí)點(diǎn)少量的新知識覺得心情愉悅 2.新知識的量>自己接受的承受范圍,就覺得很糟糕。不知不覺地就有抵觸學(xué)習(xí)的意識,越要強(qiáng)迫自己學(xué),放棄得越快,放棄了,過一段時間還想學(xué),但隨著時間流逝前面知識忘得差不多了,然后又重新學(xué),周而復(fù)始浪費(fèi)了大量時間。人最大的敵人還是自己啊,克服壞毛病,永遠(yuǎn)不要放棄,只要堅持你有能力做任何你能想象的事情,重拾自我從今天開始做起....

液晶Lcd1602顯示字符

做到只要能顯示字符就行,第一次看驅(qū)動文件和原理看的頭蒙,先會用就行。

LCD1602是一個有16引腳的字符液晶屏。8個數(shù)據(jù)引腳(D0-D7)和3個控制引腳(RS,RW,EN)。其余5個引腳用于LCD的電源和背光。

屏幕可以顯示2行,每行可以顯示16個字符。每個字符由5x8(列x行)像素矩陣組成。

自己遇到的一些問題

1._nop()_是intrins頭文件的里單周期空語句,可是實(shí)現(xiàn)極短延時。nop表示空循環(huán)一個機(jī)器指令的時間,一個nop延時多少根據(jù)晶振所定,12M中表示1us

1S=1000ms(毫秒)=1000 000us(微妙)。1us(毫秒)=1000ns(納秒)

LCD1602的速度是納秒級別的,而51單片機(jī)毫秒級別的,所以基本不需要讀取 忙標(biāo)志,只要微延時就行了,proteus仿真軟件不支持判忙函數(shù)

void lcd1602CheckBusy()//判忙函數(shù){ DPORT = 0xff;RS=0;RW=1;E=1;while(DPORT&0x80);E=0;}

2.稍微了解下LCD1602常用的一些命令,再看LCD1602初始化代碼不會這么懵了

常用的LCD1602命令

3.Proteus中學(xué)會使用終端符號

兩個引腳不用連線也能導(dǎo)通方法:兩端要加上終端符號,然后再終端上加上網(wǎng)絡(luò)標(biāo)號,要連在一起的兩個終端必須有相同的網(wǎng)絡(luò)標(biāo)號

模塊化編程思想

先學(xué)會抄作業(yè),了解如何模塊化編程

固定格式條件預(yù)編譯

把LCD1602驅(qū)動代碼導(dǎo)入到工程中仿真軟件效果完整的驅(qū)動代碼

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ù)實(shí)際硬件連接修改sbit RS = P1^7; // 根據(jù)實(shí)際硬件連接修改sbit RW = P1^6; // 根據(jù)實(shí)際硬件連接修改sbit E = P1^5; // 根據(jù)實(shí)際硬件連接修改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引腳設(shè)為高電平,RS = 1(寫數(shù)據(jù)模式)RW=0;//將RW引腳設(shè)為低電平,RW = 0(寫操作模式)DPORT=dat;// 將待寫數(shù)據(jù)送到數(shù)據(jù)端口(D0-D7)E=1; //使能脈沖,LCD鎖存D0至D7處的數(shù)據(jù)并執(zhí)行命令_nop_();//短暫延時1個機(jī)器周期1us左右_nop_();E=0; //關(guān)閉使能釋放總線}void lcd1602WriteCmd(unsigned char cmd) //寫命令函數(shù){delayNms(5);//判忙函數(shù)不支持proteus,延時5msRS=0;//將RS引腳設(shè)為低電平,RS = 0(寫命令模式)RW=0;//將RW引腳設(shè)為低電平,RW = 0(寫操作模式)DPORT=cmd;// 將待寫數(shù)據(jù)送到數(shù)據(jù)端口(D0-D7)E=1; //使能脈沖,LCD鎖存D0至D7處的數(shù)據(jù)并執(zhí)行命令_nop_();// 短暫延時1個機(jī)器周期1us左右 _nop_();E=0; //關(guān)閉使能釋放總線} void lcd1602Init() // LCD1602 初始化函數(shù) {delayNms(20); /*LCD1602的上電初始化時間大約15ms */lcd1602WriteCmd(0x38); /*設(shè)置2行,5x8矩陣,8位模式*/ lcd1602WriteCmd(0x0c); //顯示打開,光標(biāo)關(guān)閉lcd1602WriteCmd(0x06); //數(shù)據(jù)從左到右以遞增順序?qū)懭雔cd1602WriteCmd(0x01);//清屏耗時比較長需要2ms左右,別的命令以nm為單位delayNms(5); }// 內(nèi)部函數(shù)用于設(shè)置顯示字符起始坐標(biāo)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);//設(shè)置 RAM 寫入的地址}//在指定的行與列顯示指定的字符,xpos:行,ypos:列,c:待顯示字符void lcd1602WriteChar(unsigned char xPos,unsigned char yPos,unsigned char Dat){lcd1602WritePos(xPos,yPos);lcd1602WriteByte(Dat);}// 在液晶上顯示字符串,xpos:行坐標(biāo),ypos:列坐標(biāo),str-字符串指針void lcd1602WriteString(unsigned char xPos,unsigned char yPos,unsigned char *s){unsigned char i=0;lcd1602WritePos(xPos,yPos); // 起始坐標(biāo)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);}

以上就是關(guān)于pos機(jī)51錯誤碼,簡單復(fù)制粘貼代碼讓LCD1602顯示字符的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)51錯誤碼的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://www.dprolou.com/newsone/58402.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實(shí),本站將立刻刪除。