資料介紹
/* 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初始化函數 */
void? LcdCmd(uchar);????????????? /* LCD控制命令函數 */
void? LcdData(uchar);???????????? /* LCD數據輸入函數 */
void? LcdClr(void);?????????????? /* LCD清屏函數 */
void? LcdStr(uchar *);??????????? /* 顯示字符串函數 */
void? LcdDisp(uchar x,uchar d);
void? Delay_msec(uint x);???????? /* 延時函數 */
uchar Getkey(void);?????????????? /*鍵盤函數 */
void? PrintInit(void);??????????? /*打印初始化函數*/
void? PrintData (uchar? d);?????? /*打印函數*/
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)??????? /* 顯示字符串函數 */
{
?? data uchar i;
?? LcdCmd(0x80);???????????? //設置顯示數據RAM
?? for (i=0;i<=7;i++)
?? {
??????? LcdData(*p);???????? /* char of LCM */
??????? p++;
?? }
??
?? LcdCmd(0xc0);???????????? //設置顯示數據RAM
?? for (i=0;i<=7;i++)
?? {
??????? LcdData(*p);??????? /* char of LCM */
??????? p++;
?? }
}
void? LcdClr()?????????????? /* LCD清屏函數?-----通過送0x20清屏*/
{
?? data uchar i;
?? LcdCmd(0x80);???????????? //設置顯示數據RAM
?? for (i=0;i<=7;i++)
??????? LcdData(0x20);??????? /* char of LCM */
?? LcdCmd(0xc0);???????????? //設置顯示數據RAM
?? for (i=0;i<=7;i++)
??????? LcdData(0x20);???????? /* char of LCM */
}
void LcdClr1(void)?????????? /* LCD清屏函數?-----通過控制命令清屏*/?
{
??? LcdCmd(0x01);
}
void LcdCmd(uchar c)??????? /* LCD控制命令函數 */
{
? 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數據輸入函數 */
{
? 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初始化函數 */
{
? Delay_msec(41);?????????? //延時41ms
? LcdCmd(0x3c);???????????? //設置字符參數
? LcdCmd(0x08);???????????? //設置顯示開/關
? LcdCmd(0x01);???????????? //清除顯示
? Delay_msec(41);?????????? //延時41ms
? LcdCmd(0x06);???????????? //設置輸入方式
? LcdCmd(0x10);???????????? //設置顯示光標移位
? LcdCmd(0x0c);???????????? //設置顯示開/關
}
void Delay_msec(uint x)????? /* 延時函數 */
{
? 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;????? /*行基數 = 0x00 */
????????? break;
????? }
????? else if((P2&0x02)==0)
????? {
????????? keycode=0x08 + lie;????? /*行基數 = 0x08 */
????????? break;
????? }
????? else if((P2&0x04)==0)
????? {????
????????? keycode=0x10 + lie;????? /*行基數 = 0x10 */
????????? break;
????? }
????? else if((P2&0x08)==0)
????? {
????????? keycode=0x18 + lie;????? /*行基數 = 0x18 */
????????? break;
????? }
????? else if((P2&0x10)==0)
????? {
????????? keycode=0x20 + lie;????? /*行基數 = 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)????? /*打印函數*/
{
??? while (Print_busy);?????? //Busy=1,循環
??????????? _nop_ ();
??????????? _nop_ ();
??????????? _nop_ ();
??????????? _nop_ ();
??? while (Print_busy);?????? //Busy=1,循環
?????????? 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)????? /*打印初始化函數*/
{
?? 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初始化函數 */?
?? LcdInit();?????????????????? /* LCD初始化函數 */
?? PrintInit();???????????????? /*打印初始化函數
/*************************************************************/???
?? PrintString(prn0);
?? Delay_msec(400);???????????????? //延時400ms
?? PrintString(prn1);
?? LcdStr(table1);
?? Getkey();
?? LcdClr1();
?? key = Getkey()+0x30;
?? LcdDisp(1,key);
?? Getkey();
?? LcdStr(table2);
?? Getkey();
?? LcdClr();
}
- AN-645:HD44780字符LCD與MicroConverter的接口(uC014)
- AN-908: 基于HD44780的字符LCD與ADuC702x接口
- 適用于Windows 10 IoT的HD44780 LCD模塊驅動程序
- 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次下載
- 基于HD44780的字符LCD與ADuC702x接口 64次下載
- 字符型液晶顯示模塊HD44780與單片機的接口及編程
- LCD為LCM161(HD44780驅動器)字符顯示器驅動程
- HD44780使用說明
- hd44780 pdf,HD44780 lcd datash
- HD44780/KS0066中文資料,HD44780/KS0
- hd是什么意思,怎么關閉 3933次閱讀
- e2 studio環境下添加源程序到當前工程的注意事項 818次閱讀
- LCD1602的硬件參數和引腳定義 2.5w次閱讀
- HD44780讀寫單片機C51程序免費下載 4383次閱讀
- 使用HD44780讀寫單片機的C51程序詳細概述 3304次閱讀
- I2C總線驅動的C語言源程序詳細說明 5262次閱讀
- 英創:低成本LCD的選型與使用 1852次閱讀
- AT89C5l單片機用電故障控制系統的設計 1120次閱讀
- 連接器是怎么讀懂C源程序的 1531次閱讀
- LDC1000在STM32的程序 LDC1000的STM32驅動源程序 4229次閱讀
- lcd1602實現字幕滾動原理_lcd1602滾動顯示程序 4.3w次閱讀
- 單片機與圖形液晶顯示器接口的方法 1.5w次閱讀
- java程序編譯后會產生什么 1.6w次閱讀
- 命令解釋程序工作流程 5216次閱讀
- lcd1602顯示程序 2.9w次閱讀
下載排行
本周
- 1QW2893應急燈專用檢測芯片
- 590.40 KB | 1次下載 | 免費
- 2低功耗藍牙BLE透傳模塊HM-BT4531的技術規格與應用指南
- 1.40 MB | 1次下載 | 免費
- 3PC2570低Iq 理想二極管控制芯片中文資料
- 1.56 MB | 1次下載 | 免費
- 4AG32VH 系列應用指南
- 0.60 MB | 1次下載 | 免費
- 5Claroty-2024年全球CPS安全狀況:中斷對業務的影響
- 3.70 MB | 1次下載 | 免費
- 6stm32g070數據手冊和使用手冊
- 12.06 MB | 次下載 | 免費
- 7FS312B USB的PD和OC快充協議電壓誘騙控制器中文手冊
- 1.35 MB | 次下載 | 免費
- 8SY8201矽力杰高效率快速響應,1A, 27V輸入 同步降壓調節器
- 510.16 KB | 次下載 | 免費
本月
- 1AI智能眼鏡產業鏈分析
- 4.43 MB | 471次下載 | 免費
- 2蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 300次下載 | 5 積分
- 3貼片三極管上的印字與真實名稱的對照表詳細說明
- 0.50 MB | 95次下載 | 1 積分
- 4長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 91次下載 | 5 積分
- 5涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 89次下載 | 1 積分
- 6錦銳科技CA51F2 SDK開發包
- 24.06 MB | 43次下載 | 1 積分
- 7AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 8錦銳CA51F005 SDK開發包
- 19.47 MB | 19次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191388次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評論