lcd12864.zip

  • PUDN用户
    了解作者
  • C/C++
    开发工具
  • 75KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 5
    下载次数
  • 2012-07-13 11:17
    上传日期
430单片机液晶12864显示程序,此程序通过笔者多次测试是可以使用的,安全有保障,
lcd12864.zip
内容介绍
#include "System_config.h" // 配置各个头文件 void IIC_delay() { int i; i=0xff; while(i) { i--; _NOP(); } i=0xff; while(i) { i--; _NOP(); } } /*********************************** 功能:往线上发一个字节 输入:要发的数据 条件:在进入此函数前,必须保证SCL为低 ***********************************/ void SendToBus(BYTE m) { BYTE i; for(i=0;i<8;i++) { if(m&0x80) SDA_UP; else SDA_DOWN; SCL_UP; IIC_delay(); SCL_DOWN; m<<=1; } return; } /****************************** 检测线上的回答信号 ******************************/ BYTE BackAns() { BYTE flag; SDA_UP; IIC_delay(); SCL_UP; flag=0; IIC_delay(); if((PORTIN & SDA)) { flag=1; } SCL_DOWN; return flag; } /****************************** 发送一个起始信号 ******************************/ void Start() { PORTOUT &= (~SCL)&(~SDA) ; SCL_UP; IIC_delay(); SDA_UP; IIC_delay(); SDA_DOWN; //开始位 IIC_delay(); SCL_DOWN; IIC_delay(); } /****************************** 发送一个终止信号 ******************************/ void Stop() { SDA_DOWN; IIC_delay(); SCL_UP; //停止位 IIC_delay(); SDA_UP; IIC_delay(); SCL_DOWN; IIC_delay(); } void Write_IIC_Byte(BYTE data,BYTE startaddr) { do { Start(); SendToBus(CHIP); //选片地址 if(BackAns()) //从机的回答信息 continue; SendToBus(startaddr); //选择芯片上的内在地址 if(BackAns()) continue; SendToBus(data); //传输数据 if(!BackAns()) break; }while(1); Stop(); } /******************************** 函数功能:从线上读取一个字节数据 返回读取的数据 ********************************/ BYTE ReadFromBus() { int i,temp; temp = 0; SDA_UP; //读取数据之前要把SDA拉高 IIC_delay(); for(i=0;i<8;i++) { SCL_UP; IIC_delay(); temp<<=1; if(PORTIN&SDA) temp|=0x01; else temp&=0xfe; SCL_DOWN; IIC_delay(); } return temp; } /******************************** 函数功能:读数据到微控制器 * * * * 第一个参数:读数据的首地址 *********************************/ BYTE Read_IIC_Random(BYTE startaddr) { BYTE temp; do { Start(); SendToBus(CHIP); //选片地址 if(BackAns()) //从机的回答信息 continue; SendToBus(startaddr); //选择芯片上的内在地址 if(BackAns()) continue; Start(); SendToBus(CHIP + 1); if(!BackAns()) break; }while(1); temp = ReadFromBus(); //从线上读数据 NoAck(); Stop(); return temp; } /*************************** 功能:向IIC发送一个回答信号 无输入输出 **************************/ void AckToBus() { SDA_DOWN; IIC_delay(); SCL_UP; IIC_delay(); SCL_DOWN; IIC_delay(); } void NoAck() { SDA_UP; IIC_delay(); SCL_UP; IIC_delay(); SCL_DOWN; IIC_delay(); } /************************************ ---连续写len个数据到指定位置 输入:数据,存贮数据的地址,操作字节数 ************************************/ void Write_IIC_Serious(char *data,BYTE startaddr,BYTE len) { do { Start(); SendToBus(CHIP); //选片地址 if(BackAns()) //从机的回答信息 continue; SendToBus(startaddr); //选择芯片上的内在地址 if(BackAns()) continue; SendToBus(data[0]); //传输数据 if(BackAns()) continue; SendToBus(data[1]); if(!BackAns()) break; }while(1); Stop(); } /************************* 从当前位置连续读 *************************/ void Read_IIC_Curent(BYTE *data,BYTE len) { int i; Start(); SendToBus(CHIP+1); /************************* 发送读命令 *************************/ BackAns(); i=1; do { i++; data[i]=ReadFromBus(); if(i<len) AckToBus(); else break; }while(1); Stop(); } void init_IIC() { ;// PORTOUT=0; } /************************************************* Function: zlg7290_cmd Description: 周立功7290纯指令发送 *************************************************/ void zlg7290_cmd(unsigned char cmd) { Write_IIC_Byte(cmd,0x07); return; } /************************************************* Function: IsKeyDow Description: 检查是否有键按下 Return: 1 有按键按下 0 无按键按下 *************************************************/ char IsKeyDown() { char temp; temp=0; temp=Read_IIC_Random(0x00); if(temp&0x01) { return 1; } else { return 0; } } /************************************************* Function: ReadKey Description: 读取键值 Return: Read_IIC_Random(0x01) 读到的键值 *************************************************/ char ReadKey() { return Read_IIC_Random(0x01); } /************************************************* Function: ReadCnt Description: 读取按键连击次数 Return: Read_IIC_Random(0x02) 连击的次数 *************************************************/ char ReadCnt() { return Read_IIC_Random(0x02); }
评论
    相关推荐