電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>HD44780 LCD源程序

HD44780 LCD源程序

2009-01-19 | rar | 333 | 次下載 | 5積分

資料介紹

/* 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();
}

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關(guān)電源基礎(chǔ)知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發(fā)板設(shè)計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費