资 源 简 介
画了一个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使能}