⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ca24064b (t6963c)keilc51示例程序.txt

📁 CA24064B (T6963c)keilc51示例程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
CA24064B (T6963c)keilc51示例程序
发布: 2007-10-25 17:00 | 作者: | 来源: | 查看: 14次 

CA24064B (T6963c)keilc51示例程序

//                    CA24064
//***************************************************************************
//*  Create by :Ssmart   2004/12/01       KeilC V7.0                           *
//***************************************************************************
//连线表:  CPU=89C52                                                        *
//C/D=P2.0           /CE=P2.7            FS=P3.5         /WR=/WR   /RD=/RD  *
//FOSC=12MHz         D0-D7=P0.0-P0.7     /RSET=/(CPU RSET)                  *
//***************************************************************************
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>

#define uint  unsigned int
#define uchar unsigned char
#define Graphic            1
#define TXT            0
#define LcmLengthDots            240
#define LcmWidthDots            64

char xdata LcmDataPort _at_ 0x0000;
char xdata LcmCmdPort  _at_ 0x0100;
sbit FS = P3^5;
sbit Key= P3^4;

uchar code bmp1[];
uchar code str1[];

//指令&数据读写状态
void CheckRWCD(void)
{
     while((LcmCmdPort & 0x03) != 0x03);      //低电平忙
}
//数据自动写状态
void CheckAutoWrite(void)
{
     while((LcmCmdPort & 0x08) == 0);      //低电平忙
}
//屏读/屏考贝出错状态
void CheckScreen(void)
{      
     while(LcmCmdPort & 0x40);      //1出错,0正确
}
//一个数据子写入函数
void LcmWriteData(uchar uData)                        
{
     LcmDataPort = uData;
}
//一个数据读出函数
uchar LcmReadData( void )
{
     uchar uData;
     uData = LcmDataPort;
     return uData;
}
//无参数指令写入函数
void LcmWriteCommand(uchar Command)                  
{
     CheckRWCD();                        //检测指令读写状态
     LcmCmdPort = Command;
}
//单参数指令写入函数
void LcmWriteCommandWith1Par(uchar Parameter,uchar Command)
{
     CheckRWCD();                        //检测指令读写状态
     LcmDataPort = Parameter;
     CheckRWCD();
     LcmCmdPort = Command;
}
//双参数指令写入函数
void LcmWriteCommandWith2Par(uchar Parameter1,uchar Parameter2,uchar Command)
{
     CheckRWCD();                        //检测指令读写状态
     LcmDataPort = Parameter1;
     CheckRWCD();
     LcmDataPort = Parameter2;
     CheckRWCD();
     LcmCmdPort = Command;
}
//LCM初始化函数
void LcmInit( void )
{
     LcmWriteCommandWith2Par(0x00,0x00,0x40);      //设置文本显示区首地址
     LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41);      //设置文本显示区宽度
     LcmWriteCommandWith2Par(0x00,0x08,0x42);      //设置图形显示区首地址0x0800
     LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43);      //设置图形显示区宽度
     LcmWriteCommand(0xA7);                  //设置光标形状 8x8方块
     LcmWriteCommand(0x81);                  //显示方式设置 文本xor图形(异或)
     LcmWriteCommand(0x9C);                  //显示开关设置 文本开,图形开,光标闪烁关
}
//延时函数
void Delay(uint MS)
{
     uchar us,usn;
     while(MS!=0)                        //12M Crystal
     { 
           usn = 2;
           while(usn!=0)
           {
                 us=0xf2;
                 while (us!=0){us--;};
                 usn--;
           }
           MS--;
     }
}
//通过按键设定延时函数
void DelayKey(unsigned char HalfSecond)
{                              //Delay_key加入时间参数0.5秒一级
     unsigned int i;
     for(i=0;i<50*HalfSecond;i++)            //12M Crystal
     {
           if(Key==0)
           {
                 Delay(20);
                 while(Key==0) {Delay(20);}
                 break;
           }
           Delay(10);
     }
}
//清显示存储器函数
void LcmClear( uchar FillByte )
{
     uint i = 8192;      //此处仅清8K RAM,如果您32K RAM都使用,请修改i=32768(后面也要改)
     if(FillByte)      //注意如果填充ff时,如果RAM仅使用了8K,那么8192次会写入到文本区
     {                  //会形成乱码.(24064出厂时候默认将R7断开,即默认使用8KRAM)
           i -= 2*1024;//所以如果填入ff时候要扣除2K的文本区
             LcmWriteCommandWith2Par(0x00,0x08,0x24);      //填充0xff时候要在图形区
     }
     else
           LcmWriteCommandWith2Par(0x00,0x00,0x24);
     LcmWriteCommand(0xB0);                  //进入自动写
     while(i--)
     {
           CheckAutoWrite();
           LcmWriteData( FillByte );
     }
     LcmWriteCommand(0xB2);                  //退出自动写
}
//设定显示地址函数
void LocateXY(uchar x,uchar y,uchar mode)
{
     uint  temp;
     temp= LcmLengthDots/8*y + x;
     if(mode)                        //mode=1为Graphic
     {                              //如果图形模式要加上图形区首地址0x0800
           temp+=0x0800;
     }
     LcmWriteCommandWith2Par(temp&0xff,temp/256,0x24);
}
//显示一个ASCII码函数
void PutChar(uchar x,uchar y,uchar CharByte)
{
     LocateXY(x,y,TXT);
     LcmWriteCommandWith1Par(CharByte,0xC4);
}
//显示一个字符串函数
void PutString(uchar x,uchar y,uchar *str)
{
     while(*str != 0)
     {
           if(x> 29)            //自动换行
           {
                 x=0;
                 y++;
           }
           PutChar(x,y,*str);
           ++x;
           ++str;
     }
}
//显示一副图片函数
void DisplayOneBmp(uchar *puts)
{
     uchar i,j;
     uint  X=0;
     LocateXY(0,0,Graphic);
     LcmWriteCommand(0xB0);                  //进入自动写
     for(i=0;i<LcmWidthDots;i++)
     {
           for(j=0;j<LcmLengthDots/8;j++)
           {
                 CheckAutoWrite();
                 LcmWriteData(puts[X]);
                 X++;
           }
     }
     LcmWriteCommand(0xB2);                  //退出自动写
}
//反显一副图片函数
void ReverseOneBmp( void )
{                              //利用数据一次读写操作
     uchar i,j,X;            //只能对一段RAM取反
     LocateXY(0,0,Graphic);
     for(i=0;i<LcmWidthDots;i++)
     {
           for(j=0;j<LcmLengthDots/8;j++)
           {
                 LcmWriteCommand(0xC5);      //读数据,地址不变
                 CheckRWCD();
                 X = LcmReadData();
                 X = ~X;
                 LcmWriteCommandWith1Par(X,0xC0);
           }
     }
}
//屏读功能演示
void ScreenReadDemo( void )
{                              //利用屏读
                             //能对当前屏幕反显,包括合成内容(本函数仅读文本到图形)
                             //但是写入后的内容都在图形区
                             //可以将文本区内容读出以图形方式写到图形区
     uchar i,j,X;
                             //使用屏读屏考时候必须设置宽度为40(硬件已决定)
                             //所以如确定要用到屏读屏考的话最后初始化时就设40

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -