×

mega128/DS12C887的驱动程序

消耗积分:10 | 格式:rar | 大小:1133 | 2008-12-21

分享资料个

画了一个128的板子,正在调试程序,先和大家分享一下12C887的程序,能完成时钟的基本功能,如需要增加其他功能,更是方便添加
欢迎指正!!!其他程序正在出炉中。

#include
#include
#include "lcd.h"
typedef unsigned char uchar;
typedef unsigned int uint;

void port_init(void)
{
 //访问外部ram的总线端口
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTC = 0x00;
 DDRC  = 0xFF;
}
  
void check_busy(uchar cs)              
{
  uchar temp;
  while(temp)         
   {
     if(cs)
        temp=R_staus&0X80;               //将忙状态读到temp中进行确定
  else
     temp=L_staus&0X80;
 }
}


void lcdcommand(uchar cs,uchar com)
{
 if(cs)
   { 
    check_busy(1);
    R_command=com;
   }
  else
   {  
    check_busy(0);
    L_command=com;
   }
}

/*************************向LCD写数据函数*************************/

void lcddatas(char cs,uchar dd)

 if(cs)
   {
    check_busy(1);
    R_data=dd;
   }
 else
   {
    check_busy(0);
    L_data=dd;
    }
}

/**************************** LCD清屏函数*******************************/

void LCD_Clean(void)
{
 unsigned char x,y;   
 for(x=0xb8;x<=0xbf;x++)                                 //一页一页的写
   { 
     lcdcommand(0,x);
     lcdcommand(1,x);                                    //设定X方向地址,X地址不能自增。要靠程序加
     lcdcommand(0,LCD_Y);                                //设置Y的初始地址,Y可自加
     lcdcommand(1,LCD_Y);
     for(y=0;y<64;y++)
       {   
         lcddatas(0,0x00);
         lcddatas(1,0x00);                               //Y地址可以自增
       }       
    }
}
                                        
void LCD_Init(void)                     //LCD初始化子函数
{
  /*首先关闭12864的显示*/
  check_busy(0);                        //LCD左半屏正在工作,等待......
  L_command=LCD_OFF;                    //先关闭LCD左半屏的显示
  check_busy(1);                        //LCD右半屏正在工作,等待......
  R_command=LCD_OFF;                    //先关闭LCD右半屏的显示
 
  /*开启12864的显示*/
  check_busy(0);
  L_command=LCD_ON;                     //打开LCD左半屏的显示
  check_busy(1);
  R_command=LCD_ON;                     //打开LCD右半屏的显示
 
  /*设置LCD显示的起始行*/
  check_busy(0);
  L_command=LCD_X;                      //LCD左半屏起始行为0
  check_busy(1);
  R_command=LCD_X;                      //LCD右半屏起始行为0
}

void init_devices(void)
{
 XMCRA = 0x00;                          //外部存储器控制
 XMCRB = 0x00; //外存储高位地址屏蔽,释放端口C
 port_init();
 MCUCR = 0x80;                          //外部SRAM使能
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !