单片机控制12864液晶的状态函数(检查busy位)怎么写

2024-11-20 16:32:29
推荐回答(1个)
回答1:

/**********************************************************************
* 名称 : WriteCom()
* 功能 : 写命令函数
* 输入 : 无
* 输出 : 无
* 说明 : _nop_指令起延时作用,晶振为12MHz时候,延时时长的计算公式如下
T=1/(12M/12分频)
************************************************-***********************/
void WriteCom(uchar Com)
{
uchar LCDtemp=0x00; /*设置初值为0,全部为低,方便后面的判忙*/
RS=0; /*根据时序图拉低,选择写指令*/
RW=1; /*根据时序图拉低,选择写模式*/
do
{
EN=1; /*使能,使液晶输出信号,检查是否忙*/
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
LCDtemp=P1; /*把P1口的状态值读回来给temp*/
EN=0; /*使能端跳变*/;
}
while(LCDtemp&0x80); /*结果的高位保留,如果高位DB7为一,则表示忙*/
RS=0; /*指令模式*/
RW=0; /*写模式*/
EN=0; /*使能*/
_nop_();_nop_(); /*延时2US*/
P1=Com; /*注意数据方向,写时IO口位置在前,读时IO口位置在后*/
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
EN=1; /*使能拉高*/
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
EN=0; /*使能拉低*/
}
/**********************************************************************
* 名称 : WriteData()
* 功能 : 写数据函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void WriteData(uchar Data)
{
uchar LCDtemp=0x00; /*设置初值为0,全部为低,方便后面的判忙*/
RS=0; /*根据时序图拉低,选择写指令*/
RW=1; /*根据时序图拉低,选择写模式*/
do
{
EN=1; /*使能拉高*/
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
LCDtemp=P1; /*把P2口的状态值读回来给temp*/
EN=0; /*使能拉低*/
}
while(LCDtemp&0x80); /*结果的高位保留,如果高位DB7为一,则表示忙*/
RS=1; /*选择数据模式*/
RW=0; /*选择写模式*/
EN=0; /*使能拉低*/
_nop_();_nop_(); /*延时2US*/
P1=Data; /*注意数据方向,写时IO口位置在前,读时IO口位置在后*/
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
EN=1; /*使能拉高*/
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
EN=0; /*使能拉低*/
}