資料介紹
/* LCD 型號:HD44780?????? */
/*打印機型號: EPSON M311?? */
#include
#include
#include
#define? uchar???? unsigned char
#define? uint????? unsigned int
?????????????????????????????????? //定義8255I/O端口地址
#define? PCC8255?? XBYTE[0x007f]?? //8255命令口地址
#define? PC8255??? XBYTE[0x007e]?? //8255的PC口地址
#define? PB8255??? XBYTE[0x007d]?? //8255的PC口地址
#define? PA8255??? XBYTE[0x007c]?? //8255的PC口地址
sfr????? RPCTL????? = 0xD8;
sbit???? RPCTL_5??? = RPCTL^5;
sbit???? LS164A???? = P2^5;
sbit???? LS164cp??? = P2^6;
sbit???? Print_busy = P3^3;
sbit???? IC_RST???? = P1^1;
sbit???? IC_CLK???? = P1^0;
sbit???? IC_IO????? = P1^2;
sbit???? IC_PGM???? = P3^2;
uchar code table1[16]="FEDCBA9870123456";
uchar code table2[16]="0000123456789ABC";
void? INIT_8255(void);??????????? /*初始化8255*/
void? LcdInit(void);????????????? /* LCD初始化函數(shù) */
void? LcdCmd(uchar);????????????? /* LCD控制命令函數(shù) */
void? LcdData(uchar);???????????? /* LCD數(shù)據(jù)輸入函數(shù) */
void? LcdClr(void);?????????????? /* LCD清屏函數(shù) */
void? LcdStr(uchar *);??????????? /* 顯示字符串函數(shù) */
void? LcdDisp(uchar x,uchar d);
void? Delay_msec(uint x);???????? /* 延時函數(shù) */
uchar Getkey(void);?????????????? /*鍵盤函數(shù) */
void? PrintInit(void);??????????? /*打印初始化函數(shù)*/
void? PrintData (uchar? d);?????? /*打印函數(shù)*/
void? PrintString(uchar *p);????? //打印字符串
void LcdDisp(uchar x,uchar d)??? //指定位置顯示字符 x:LCD位置 d:字符
{
? if(x<9)
? {
???? LcdCmd(0x80 + x);
???? LcdData(d);
? }
? else
? {
???? LcdCmd(0xc0 + x);
???? LcdData(d);
? }
}
void LcdStr(uchar *p)??????? /* 顯示字符串函數(shù) */
{
?? data uchar i;
?? LcdCmd(0x80);???????????? //設(shè)置顯示數(shù)據(jù)RAM
?? for (i=0;i<=7;i++)
?? {
??????? LcdData(*p);???????? /* char of LCM */
??????? p++;
?? }
??
?? LcdCmd(0xc0);???????????? //設(shè)置顯示數(shù)據(jù)RAM
?? for (i=0;i<=7;i++)
?? {
??????? LcdData(*p);??????? /* char of LCM */
??????? p++;
?? }
}
void? LcdClr()?????????????? /* LCD清屏函數(shù)?-----通過送0x20清屏*/
{
?? data uchar i;
?? LcdCmd(0x80);???????????? //設(shè)置顯示數(shù)據(jù)RAM
?? for (i=0;i<=7;i++)
??????? LcdData(0x20);??????? /* char of LCM */
?? LcdCmd(0xc0);???????????? //設(shè)置顯示數(shù)據(jù)RAM
?? for (i=0;i<=7;i++)
??????? LcdData(0x20);???????? /* char of LCM */
}
void LcdClr1(void)?????????? /* LCD清屏函數(shù)?-----通過控制命令清屏*/?
{
??? LcdCmd(0x01);
}
void LcdCmd(uchar c)??????? /* LCD控制命令函數(shù) */
{
? RPCTL_5 = 1;
? Delay_msec(1);??????????? //延時1ms (1000us)
? PCC8255 = 0x00;
? PCC8255 = 0x02;
? PB8255? = c? ;
? PCC8255 = 0x05;
? PCC8255 = 0x04;
? Delay_msec(1);??????????? //延時1ms (1000us)
? RPCTL_5 = 0;
}
void LcdData(uchar? c)????? /* LCD數(shù)據(jù)輸入函數(shù) */
{
? RPCTL_5 = 1;
? Delay_msec(1);??????????? //延時1ms (1000us)
? PCC8255 = 0x01;
? PCC8255 = 0x02;
? PB8255? = c;????
? PCC8255 = 0x05;
? PCC8255 = 0x04;
? Delay_msec(1);??????????? //延時1ms (1000us)
? RPCTL_5 = 0;
}
void LcdInit()????????????? /* LCD初始化函數(shù) */
{
? Delay_msec(41);?????????? //延時41ms
? LcdCmd(0x3c);???????????? //設(shè)置字符參數(shù)
? LcdCmd(0x08);???????????? //設(shè)置顯示開/關(guān)
? LcdCmd(0x01);???????????? //清除顯示
? Delay_msec(41);?????????? //延時41ms
? LcdCmd(0x06);???????????? //設(shè)置輸入方式
? LcdCmd(0x10);???????????? //設(shè)置顯示光標移位
? LcdCmd(0x0c);???????????? //設(shè)置顯示開/關(guān)
}
void Delay_msec(uint x)????? /* 延時函數(shù) */
{
? data uchar i;
? do
? {
??? for (i=0;i<125;i++)????? /*延時 8us x 125 = 1ms? */
???????? ;
? }
? while((x--)!=0);
}
/*-----------------------------------------------------------------*/
void INIT_8255(void)??? /*8255 初始化 */
{
? RPCTL_5 = 1;
??? _nop_ ();
? PCC8255 = 0x80;
??? _nop_ ();
? RPCTL_5 = 0;
}
/*---------------------------------------------------------------*/
uchar Getkey(void)
{
? uchar i,lie,keycode,flag;
? flag=0;
? LS164A=0;???????????????? //向74Ls164移入8個0
? for (i=0;i<8;i++)
? {
?????? LS164cp=0;??
?????? LS164cp=1;
? }
? while((P2&0x1f)==0x1f);???? //是否有鍵閉合?
? Delay_msec(100);??????????? //延時10ms (10,000us)
? while((P2&0x1f)==0x1f);???? //是否有鍵閉合?
? LS164A = 1;???????????????? //向74Ls164移入8個1
? for (i=0;i<8;i++)
? {
??????? LS164cp = 0;??
???????? LS164cp = 1;
? }
? i=0;
? lie = 0;??????????????????????? //lie --列號
? while(i<8)
? {
????? LS164A = 0;???????????????? //向74Ls164移入0
????? LS164cp = 0;??
????? LS164cp = 1;
????? if((P2&0x01)==0)
????? {
????????? keycode=0x00 + lie;????? /*行基數(shù) = 0x00 */
????????? break;
????? }
????? else if((P2&0x02)==0)
????? {
????????? keycode=0x08 + lie;????? /*行基數(shù) = 0x08 */
????????? break;
????? }
????? else if((P2&0x04)==0)
????? {????
????????? keycode=0x10 + lie;????? /*行基數(shù) = 0x10 */
????????? break;
????? }
????? else if((P2&0x08)==0)
????? {
????????? keycode=0x18 + lie;????? /*行基數(shù) = 0x18 */
????????? break;
????? }
????? else if((P2&0x10)==0)
????? {
????????? keycode=0x20 + lie;????? /*行基數(shù) = 0x20 */
????????? break;
????? }
????? else
????? {?? i++;
????????? lie = lie + 1;?????????? /*列號 + 1 ---下一列*/
????????? if(i==8)
???????????? flag=1;
????? }
? }
? if(flag==0)
? {
???? LS164A=0;
???? for (i=0;i<8;i++)
???? {
???????? LS164cp=0;??
?????????? LS164cp=1;
???? }
???? while((P2&0x1f)!=0x1f);???? /*按鍵是否釋放*/
???? return(keycode);??????????? /*返回鍵碼 */
? }
? else
???? return -1;
}
/*-------------------------------------------------------------------*/
void PrintData (uchar? d)????? /*打印函數(shù)*/
{
??? while (Print_busy);?????? //Busy=1,循環(huán)
??????????? _nop_ ();
??????????? _nop_ ();
??????????? _nop_ ();
??????????? _nop_ ();
??? while (Print_busy);?????? //Busy=1,循環(huán)
?????????? RPCTL_5 = 1;
?????????????
?????????? PA8255? = d;
?????????? PCC8255 = 0x08;
?????????? PCC8255 = 0x09;
?????????? RPCTL_5 = 0 ;
}????
void PrintString(uchar *p)???? //打印字符串
{
?? while(*p!='\0')
?? {
???????? PrintData(*p);
???????? p++;
?? }
?? PrintData(0x0a);
}
/*-----------------------------------------------------------------*/
void PrintInit(void)????? /*打印初始化函數(shù)*/
{
?? uchar i;
?? uchar code Prninitdata[12] ={0x01,0x1b,0x40,0x1b,0x55,0x25,0x1c,0x26,
??????????????????????????????? 0x1b,0x33,0x02};
?? for (i=0;i<11;i++)
?????? PrintData(Prninitdata[i]);
}
/*-----------------------------------------------------------------*/
void main()
{
? data uchar key;???
? uchar code prn0[]=" 電 腦 中 心";
? uchar code prn1[]="趙俊杰";
/*************************************************************/
?? Delay_msec(41);??????????????? //延時41ms
?? Delay_msec(41);??????????????? //延時41ms
?? Delay_msec(41);??????????????? //延時41ms
?? Delay_msec(41);??????????????? //延時41ms
?? INIT_8255();???????????????? /*8255初始化函數(shù) */?
?? LcdInit();?????????????????? /* LCD初始化函數(shù) */
?? PrintInit();???????????????? /*打印初始化函數(shù)
/*************************************************************/???
?? PrintString(prn0);
?? Delay_msec(400);???????????????? //延時400ms
?? PrintString(prn1);
?? LcdStr(table1);
?? Getkey();
?? LcdClr1();
?? key = Getkey()+0x30;
?? LcdDisp(1,key);
?? Getkey();
?? LcdStr(table2);
?? Getkey();
?? LcdClr();
}
- 適用于Windows 10 IoT的HD44780 LCD模塊驅(qū)動程序
- SPI LCD HD44780芯片組開源
- 基于HD44780控制器的串行LCD上的Stopwatch3
- AN-645將HD44780字符LCD連接到MicroConverter?(UC014)
- AN-645:將HD44780字符LCD連接到MicroConverter<sup>?</sup>(UC014)
- LCD1602液晶顯示屏的中文資料詳細說明 15次下載
- DSP之hd44780教程 14次下載
- LCD1602液晶詳細資料 478次下載
- LCD1602引腳定義 650次下載
- 基于HD44780的字符LCD與ADuC702x接口 64次下載
- 字符型液晶顯示模塊HD44780與單片機的接口及編程
- LCD為LCM161(HD44780驅(qū)動器)字符顯示器驅(qū)動程
- HD44780使用說明
- hd44780 pdf,HD44780 lcd datash
- HD44780/KS0066中文資料,HD44780/KS0
- e2 studio環(huán)境下添加源程序到當前工程的注意事項 542次閱讀
- LCD1602的硬件參數(shù)和引腳定義 2.4w次閱讀
- HD44780讀寫單片機C51程序免費下載 4146次閱讀
- 使用HD44780讀寫單片機的C51程序詳細概述 3112次閱讀
- I2C總線驅(qū)動的C語言源程序詳細說明 5050次閱讀
- 英創(chuàng):低成本LCD的選型與使用 1684次閱讀
- AT89C5l單片機用電故障控制系統(tǒng)的設(shè)計 1040次閱讀
- 連接器是怎么讀懂C源程序的 1462次閱讀
- LDC1000在STM32的程序 LDC1000的STM32驅(qū)動源程序 4109次閱讀
- lcd1602實現(xiàn)字幕滾動原理_lcd1602滾動顯示程序 4.2w次閱讀
- 單片機與圖形液晶顯示器接口的方法 1.5w次閱讀
- java程序編譯后會產(chǎn)生什么 1.5w次閱讀
- 命令解釋程序工作流程 5091次閱讀
- lcd1602顯示程序 2.9w次閱讀
- LCD的ARM編程方式,LCD Linux程序如何寫入? 1619次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關(guān)電源基礎(chǔ)知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發(fā)板設(shè)計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多