📄 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 + -