打印

请教液晶一个驱动程序的问题

[复制链接]
2027|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mountainlb|  楼主 | 2007-8-12 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数: x        指定点所在列的位置
*           y        指定点所在行的位置
*           color    显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址超出有
*          效范围)
****************************************************************************/
uint8  GUI_Point(uint32 x, uint32 y, TCOLOR color)
{  /* 参数过滤 */
   if(x>=GUI_LCM_XMAX) return(0);
   if(y>=GUI_LCM_YMAX) return(0);
   
   /* 设置缓冲区相应的点 */
   if( (color&0x01) != 0 ) gui_disp_buf[y][x>>3] |= DCB_HEX_TAB[x&0x07];
      else  gui_disp_buf[y][x>>3] &= (~DCB_HEX_TAB[x&0x07]);

   /* 刷新显示 */
   LCD_UpdatePoint(x, y);
   return(1);
}

DCB_HEX_TAB[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}
请问 在液晶驱动中 这个数组是干什么用的 
   if( (color&0x01) != 0 ) gui_disp_buf[y][x>>3] |= DCB_HEX_TAB[x&0x07];
      else  gui_disp_buf[y][x>>3] &= (~DCB_HEX_TAB[x&0x07]);
这个又是什么意思?

相关帖子

沙发
太阳之母| | 2007-8-12 15:24 | 只看该作者

嘿嘿

我来白话白话吧,不一定对滴啊,仅供参考。
1、用这个驱动程序的话,LCD肯定是单色的,对吧?
2、color    显示颜色(对于黑白色LCM,为偶数时灭,为奇数时显示)
3、说明一下:
A、DCB_HEX_TAB[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}
   请问 在液晶驱动中 这个数组是干什么用的 
B、if( (color&0x01) != 0 ) gui_disp_buf[y][x>>3] |= DCB_HEX_TAB   [x&0x07];
   else  gui_disp_buf[y][x>>3] &= (~DCB_HEX_TAB[x&0x07]);
这个又是什么意思?

先说明gui_disp_buf[][]吧,这个明白了,DCB_HEX_TAB[]就几乎不用说了。

gui_disp_buf[][]是显示缓冲区,它的数组元素是字节型的,[y][x>>3]的意思就是:  (知道>>3就是除以8吧?)

对于屏幕坐标(x,y)来说,象素点的值在gui_disp_buf[y][x/8]里放着,实际上在
数组元素gui_disp_buf[y][x/8]里,一共放了8个坐标点的象素值,这是因为LCD是单色的,一个点用一位就行了,
所以一个字节里面能存放8个点的象素值。

这8个象素对应的x坐标是:
8*(x/8)+0  8*(x/8)+1  8*(x/8)+2  8*(x/8)+3  8*(x/8)+4  8*(x/8)+5  8*(x/8)+6  8*(x/8)+7

这8个象素对应的象素值分别放在数组元素gui_disp_buf[y][x/8]的
二进制位上:    bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7
对应位上的值是:0x01 0x02 0x04 0x08 0x10 0x20 0x40 0x80---->这就是DCB_HEX_TAB[]值的来历

   if( (color&0x01) != 0 ) gui_disp_buf[y][x>>3] |= DCB_HEX_TAB[x&0x07];
   else  gui_disp_buf[y][x>>3] &= (~DCB_HEX_TAB[x&0x07]);

改成下面的样子,可能就好理解一些,注意这样就不需要DCB_HEX_TAB[]了。

   if( (color&0x01) != 0 )                           //如果要点亮象素,对应象素的值为1
      gui_disp_buf[y][x/8] |= 1<<(x&0x07);//水平坐标=x的点,其象素值在gui_disp_buf[y][x/8]里某一位上放者。
                                          //在哪个位上放着呢?由x&0x07确定,x&0x07等价于x%8,说“对8取模”
                                          //说更容易明白了吧?
   else  
      gui_disp_buf[y][x>>3] &= ( ~(1<<(x&0x07)) );//类似上面的说明,只是象素值为0了!


使用特权

评论回复
板凳
mountainlb|  楼主 | 2007-8-12 21:59 | 只看该作者

哈哈

老兄 受益匪浅 多谢啊 !!

使用特权

评论回复
地板
laowu219| | 2007-8-18 09:41 | 只看该作者

请帮忙看看,为何液晶没反应


//液晶型号是  lcm6432zk
//cup是c8051f320
cs一直接高电平,用的是2线串行传输
//============头文件============================

#include <c8051f320.h>
#include<intrins.h>
#include<absacc.h>

//============宏定义=============================

#define uchar unsigned char
#define uint unsigned int

//============全局变量定义=======================

sbit SCLK =P0^4;                                  //LCM同步时钟输入端SCLK接P04
sbit SID =P0^5;                                      //LCM串行数据输入端SID接P05
sbit P1_4 =P1^4;
//sbit P1_5 =P1^5;

/*===============================================
         函数定义
===============================================*/
void SYSCLK_Init(void);                              
void PORT_Init(void);
void WORK_Led(void);
//void BATT_Low(void);                              
void TIME2_Init(void);                            
void LCM_Init(void);
void delay(uint n);
void WriteCMD(uchar dat);
void WriteDAT(uchar dat);
void _nop_();                      
/*===============================================
                  主程序
===============================================*/
void main(void)
{
  PCA0MD =0x00;                                   //禁止看门狗定时器
  SYSCLK_Init();                                  //初始化系统时钟
  PORT_Init();                                      //初始化端口
  WORK_Led();                                      //工作指示灯亮
  TIME2_Init();                                   //初始化定时器2
  LCM_Init();                                      //LCD初始化
  while(1)
  {
    WriteCMD(0x08);                                  //关闭显示
    delay(10);
    WriteCMD(0x01);                                  //清 屏
    delay(80);
    WriteCMD(0x0c);                                  //打开显示
    delay(10);
    WriteCMD(0x80);                                  //设定显示地址
    delay(10);
    WriteDAT(0x4c);
    delay(10);
    WriteDAT(0x43);
    delay(10);
  }
}
/*===============================================
  函数功能: LCD初始化
===============================================*/
void LCM_Init(void)                                  
{
  delay(500);                                      //延时50ms
  WriteCMD(0x30);                                  //功能设置:使用8位控制界面
  delay(2);                                          //延时200us
  WriteCMD(0x30);                                  //功能设置:使用基本指令集
  delay(2);                                          //延时200us
  WriteCMD(0x0f);                                  //打开LCM
  delay(2);                                          //延时200us
  WriteCMD(0x01);                                  //清DDRAM
  delay(80);                                     //延时20ms
  WriteCMD(0x06);                                  //点设定:显示字符/光标从左到右移位,DDRAM地址加1
  delay(1);
}
/*===============================================
  函数功能: 系统时钟初始化
===============================================*/
void SYSCLK_Init(void)                             
{
  OSCICN =0xC2;                                    //选择内部振荡器频率为12MHz/2;                                       
}
/*===============================================
  函数功能:    初始化I/O
===============================================*/
void PORT_Init(void)                               
{   
   XBR1 = 0x40;                                    //使能交叉开关,弱上拉
   P0MDOUT =0xff;                                   //推挽输出
   P1MDOUT =0xff;
}
/*===============================================
  函数功能:    工作指示灯,led点亮时正常工作
===============================================*/
void WORK_Led(void)
{
  P1_4 =1;
}


/*==============================================
  函数功能: 定时器2初始化
==============================================*/
void TIME2_Init(void)                              
{
  CKCON =0x30;                                     //定时器2选用系统时钟
  TMR2RLL =(65536-600)%256;                       //0.1ms
  TMR2RLH =(65536-600)/256; 
  TMR2CN =0x00;                                    //定时器2工作在16位自动重装载方式
}
/*==============================================
  函数功能: 延时 n*0.1 ms
==============================================*/
void delay(uint n)                                   
{
  while(n--)
  {  
    TR2 =1;                         
    while(!TF2H);
    TF2H =0;
    TF2L =0;
    TR2 =0; 
  }
}

/*===================================
       函数功能: LCD初始化
====================================*/
void LCM_Init(void)          
{
  delay(500);          //延时50ms
  WriteCMD(0x30);         //功能设置:使用8位控制界面
  delay(1);           //延时100us
  WriteCMD(0x30);         //功能设置:使用基本指令集
  delay(1);           //延时100us
  WriteCMD(0x0f);         //打开LCM
  delay(1);           //延时100us
  WriteCMD(0x01);         //清DDRAM
  delay(100);                        //延时10ms
  WriteCMD(0x06);         //点设定:显示字符/光标从左到右移位
  delay(1);
}
/*===============================================
        函数功能:LCM写控制指令
================================================*/
void WriteCMD(uchar dat)             
{
  uchar tmp[8]={0};
  tmp[7] =dat & 0x80;
  tmp[6] =dat & 0x40;
  tmp[5] =dat & 0x20;
  tmp[4] =dat & 0x10;
  tmp[3] =dat & 0x08;
  tmp[2] =dat & 0x04;
  tmp[1] =dat & 0x02;
  tmp[0] =dat & 0x01;
//=========起始位元组===========//write“1  1  1  1  1  RW=0  RS=0  0”======
  SID =1;                                           
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID =0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1); 
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
//==========第一个位元组=========//send“D7  D6  D5  D4  0  0  0  0”======
                          
  SID=tmp[7];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[6];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[5];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[4];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);    
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);    
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
//=========第二个位元组=========//send“D3  D2  D1  D0  0  0  0  0”=======
  SID=tmp[3];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[2];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[1];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[0]; 
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
}
/*=============================================
  函数功能: 写显示数据;也可以写一个单字节字符
=============================================*/
void WriteDAT(uchar dat)          
{
  uchar tmp[8]={0};
  tmp[7] =dat & 0x80;
  tmp[6] =dat & 0x40;
  tmp[5] =dat & 0x20;
  tmp[4] =dat & 0x10;
  tmp[3] =dat & 0x08;
  tmp[2] =dat & 0x04;
  tmp[1] =dat & 0x02;
  tmp[0] =dat & 0x01;
//=========起始位元组=============//write“1  1  1  1  1  RW=0  RS=1  0”======
  SID =1;                                           
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID =0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID =1;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1); 
  SID =0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
//==========第一个位元组=========//send“D7  D6  D5  D4  0  0  0  0”======
                          
  SID=tmp[7];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[6];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[5];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[4];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);    
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);    
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
//=========第二个位元组===========//send“D3  D2  D1  D0  0  0  0  0”=======
  SID=tmp[3];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[2];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[1];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[0]; 
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
}

使用特权

评论回复
5
laowu219| | 2007-8-18 10:23 | 只看该作者

请帮忙看看,为何液晶没反应




//液晶型号是  lcm6432zk
//cup是c8051f320
cs一直接高电平,用的是2线串行传输
//============头文件============================

#include <c8051f320.h>
#include<intrins.h>
#include<absacc.h>

//============宏定义=============================

#define uchar unsigned char
#define uint unsigned int

//============全局变量定义=======================

sbit SCLK =P0^4;                                  //LCM同步时钟输入端SCLK接P04
sbit SID =P0^5;                                      //LCM串行数据输入端SID接P05
sbit P1_4 =P1^4;
//sbit P1_5 =P1^5;

/*===============================================
         函数定义
===============================================*/
void SYSCLK_Init(void);                              
void PORT_Init(void);
void WORK_Led(void);
//void BATT_Low(void);                              
void TIME2_Init(void);                            
void LCM_Init(void);
void delay(uint n);
void WriteCMD(uchar dat);
void WriteDAT(uchar dat);
void _nop_();                      
/*===============================================
                  主程序
===============================================*/
void main(void)
{
  PCA0MD =0x00;                                   //禁止看门狗定时器
  SYSCLK_Init();                                  //初始化系统时钟
  PORT_Init();                                      //初始化端口
  WORK_Led();                                      //工作指示灯亮
  TIME2_Init();                                   //初始化定时器2
  LCM_Init();                                      //LCD初始化
  while(1)
  {
    WriteCMD(0x08);                                  //关闭显示
    delay(10);
    WriteCMD(0x01);                                  //清 屏
    delay(80);
    WriteCMD(0x0c);                                  //打开显示
    delay(10);
    WriteCMD(0x80);                                  //设定显示地址
    delay(10);
    WriteDAT(0x4c);
    delay(10);
    WriteDAT(0x43);
    delay(10);
  }
}
/*===============================================
  函数功能: LCD初始化
===============================================*/
void LCM_Init(void)                                  
{
  delay(500);                                      //延时50ms
  WriteCMD(0x30);                                  //功能设置:使用8位控制界面
  delay(2);                                          //延时200us
  WriteCMD(0x30);                                  //功能设置:使用基本指令集
  delay(2);                                          //延时200us
  WriteCMD(0x0f);                                  //打开LCM
  delay(2);                                          //延时200us
  WriteCMD(0x01);                                  //清DDRAM
  delay(80);                                     //延时20ms
  WriteCMD(0x06);                                  //点设定:显示字符/光标从左到右移位,DDRAM地址加1
  delay(1);
}
/*===============================================
  函数功能: 系统时钟初始化
===============================================*/
void SYSCLK_Init(void)                             
{
  OSCICN =0xC2;                                    //选择内部振荡器频率为12MHz/2;                                       
}
/*===============================================
  函数功能:    初始化I/O
===============================================*/
void PORT_Init(void)                               
{   
   XBR1 = 0x40;                                    //使能交叉开关,弱上拉
   P0MDOUT =0xff;                                   //推挽输出
   P1MDOUT =0xff;
}
/*===============================================
  函数功能:    工作指示灯,led点亮时正常工作
===============================================*/
void WORK_Led(void)
{
  P1_4 =1;
}


/*==============================================
  函数功能: 定时器2初始化
==============================================*/
void TIME2_Init(void)                              
{
  CKCON =0x30;                                     //定时器2选用系统时钟
  TMR2RLL =(65536-600)%256;                       //0.1ms
  TMR2RLH =(65536-600)/256; 
  TMR2CN =0x00;                                    //定时器2工作在16位自动重装载方式
}
/*==============================================
  函数功能: 延时 n*0.1 ms
==============================================*/
void delay(uint n)                                   
{
  while(n--)
  {  
    TR2 =1;                         
    while(!TF2H);
    TF2H =0;
    TF2L =0;
    TR2 =0; 
  }
}

/*===================================
       函数功能: LCD初始化
====================================*/
void LCM_Init(void)          
{
  delay(500);          //延时50ms
  WriteCMD(0x30);         //功能设置:使用8位控制界面
  delay(1);           //延时100us
  WriteCMD(0x30);         //功能设置:使用基本指令集
  delay(1);           //延时100us
  WriteCMD(0x0f);         //打开LCM
  delay(1);           //延时100us
  WriteCMD(0x01);         //清DDRAM
  delay(100);                        //延时10ms
  WriteCMD(0x06);         //点设定:显示字符/光标从左到右移位
  delay(1);
}
/*===============================================
        函数功能:LCM写控制指令
================================================*/
void WriteCMD(uchar dat)             
{
  uchar tmp[8]={0};
  tmp[7] =dat & 0x80;
  tmp[6] =dat & 0x40;
  tmp[5] =dat & 0x20;
  tmp[4] =dat & 0x10;
  tmp[3] =dat & 0x08;
  tmp[2] =dat & 0x04;
  tmp[1] =dat & 0x02;
  tmp[0] =dat & 0x01;
//=========起始位元组===========//write“1  1  1  1  1  RW=0  RS=0  0”======
  SID =1;                                           
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID =0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1); 
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
//==========第一个位元组=========//send“D7  D6  D5  D4  0  0  0  0”======
                          
  SID=tmp[7];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[6];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[5];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[4];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);    
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);    
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
//=========第二个位元组=========//send“D3  D2  D1  D0  0  0  0  0”=======
  SID=tmp[3];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[2];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[1];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[0]; 
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
}
/*=============================================
  函数功能: 写显示数据;也可以写一个单字节字符
=============================================*/
void WriteDAT(uchar dat)          
{
  uchar tmp[8]={0};
  tmp[7] =dat & 0x80;
  tmp[6] =dat & 0x40;
  tmp[5] =dat & 0x20;
  tmp[4] =dat & 0x10;
  tmp[3] =dat & 0x08;
  tmp[2] =dat & 0x04;
  tmp[1] =dat & 0x02;
  tmp[0] =dat & 0x01;
//=========起始位元组=============//write“1  1  1  1  1  RW=0  RS=1  0”======
  SID =1;                                           
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID =0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID =1;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1); 
  SID =0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);   
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
//==========第一个位元组=========//send“D7  D6  D5  D4  0  0  0  0”======
                          
  SID=tmp[7];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[6];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[5];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[4];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);    
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);    
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
//=========第二个位元组===========//send“D3  D2  D1  D0  0  0  0  0”=======
  SID=tmp[3];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[2];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[1];
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=tmp[0]; 
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SID=0;
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
  SCLK =0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);     
  SCLK =1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();delay(1);
}
 
 

使用特权

评论回复
6
太阳之母| | 2007-8-19 15:05 | 只看该作者

嘿嘿

LS你还没学C里的循环语句吧?呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

8

帖子

1

粉丝