?? epson m311.txt
字號:
C51編程:一點心得 [方塘] [141次] 01-5-18 下午 06:51:32
學了幾個星期的C51,做了幾個驅動程序。還有一點心得,共享出來。請指點!
1, 當判斷P2口的位時,不要直接用 P2^x做判斷。最好用按位 & 判斷。
因為在reg51.h中沒有定義P2^x 。但編譯不會提示出錯。
2, 用帶參數編譯可以得到有匯編程序內容的 *.lst文件。通過查看匯編程序可以找到
C程序的一些問題。
題。/********************************************************************
驅動程? ?zh.c
********************************************************************/
/* LCD 型號:HD44780 */
/*打印機型號: EPSON M311 */
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#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清屏函數
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -