#include <reg52.h>
#include "LCD12864.h"
#include "zifu8_8.h"
#include <intrins.h>
/*********初始化************/
void lcd_init( void )
{
write_cmd_L( 0x3e ); //关显示
write_cmd_R( 0x3e );
write_cmd_L( 0xc0 ); //起始行
write_cmd_R( 0xc0 );
write_cmd_L( 0x3f ); //开显示
write_cmd_R( 0x3f );
lcd_clr( ); //清屏
}
/************清屏***********/
void lcd_clr( void )
{
unsigned char i,j,page;
for( i = 0; i < 8; i++ )
{
page = i;
page |= 0xb8;
write_cmd_L( page );
write_cmd_L( 0x40 );
for( j = 0; j < 64; j++ )
write_dat_L( 0 );
write_cmd_R( page );
write_cmd_R( 0x40 );
for( j = 0; j < 64; j++ )
write_dat_R( 0 );
}
}
/*------------------显示12864图片---------------------------*/
void Disp_Img(unsigned char code *img)
{
unsigned char j,k,page = 0;
for( k = 0; k < 8; k++ )
{
page = k;
page |= 0xb8;
write_cmd_L( page );
write_cmd_L( 0x40 );
for( j = 0; j < 64; j++ )
write_dat_L(img[k*128+j]);
write_cmd_R( page );
write_cmd_R( 0x40 );
for(j=64;j<128;j++)
write_dat_R(img[k*128+j]);
}
}
/***********-写左命令************/
void write_cmd_L( unsigned char cmd )
{
CSB = 1;
CSA = 0;
DI = 0;
RW = 1;
do
{
DataLine = 0xff;
E = 1;
_nop_();
}while( BUSY );
E = 0;
RW = 0;
DataLine = cmd;
E = 1;
_nop_();
E = 0;
}
/***********-写右命令**********-*/
void write_cmd_R( unsigned char cmd )
{
CSB = 0;
CSA = 1;
DI = 0;
RW = 1;
do
{
DataLine = 0xff;
E = 1;
_nop_();
}while( BUSY );
E = 0;
RW = 0;
DataLine = cmd;
E = 1;
_nop_();
E = 0;
}
/***********写左数据***********/
void write_dat_L( unsigned char dat )
{
CSB = 1;
CSA = 0;
DI = 0;
RW = 1;
do
{
DataLine = 0xff;
E = 1;
_nop_();
}while( BUSY );
E = 0;
DI = 1;
RW = 0;
DataLine = dat;
E = 1;
_nop_();
E = 0;
}
/***********写右数据***********/
void write_dat_R( unsigned char dat )
{
CSB = 0;
CSA = 1;
DI = 0;
RW = 1;
do
{
DataLine = 0xff;
E = 1;
_nop_();
}while( BUSY );
E = 0;
DI = 1;
RW = 0;
DataLine = dat;
E = 1;
_nop_();
E = 0;
}
void write_data(unsigned char xpos,unsigned char ypos,unsigned char lcddata)
{ if(xpos<128)
{
if( ( xpos & 0x40 )== 0 )
{
write_cmd_L( 0xb8 | ypos );
write_cmd_L( 0x40 | xpos);
write_dat_L( lcddata );
}
else
{
write_cmd_R( 0xb8 | ypos );
write_cmd_R( 0x40 | xpos );
write_dat_R( lcddata );
}
}
}
/************显示一个字符************/
void lcd_putchar8x8( unsigned char x,unsigned char y,unsigned char ch )
{
unsigned char i;
for( i = 0; i < 8; i ++ )
{
write_data( x+i, y, zifu[(ch - 0x20)*8 + i] );
// write_data( x+i, y + 1,zifu[(ch - 0x20)*8 + 8 + i] );
}
}
/************** 显示汉字*****************/
// x 显示列 y 显示行
void hz_disp( unsigned char x, unsigned char y, unsigned char *hz )
{
unsigned char i;
for( i = 0; i < 16; i++ )
{
write_data( x + i, y, hz[ i] );
write_data( x + i, y + 1, hz[ 16 + i] );
}
}
void hz_disp32x32( unsigned char x, unsigned char y, unsigned char *hz )
{
unsigned char i;
for( i = 0; i < 30; i++ )
{
write_data( x + i, y, hz[ i] );
write_data( x + i, y + 1, hz[ 28 + i] );
write_data( x + i, y+2, hz[57+i] );
write_data( x + i, y +3, hz[86 + i] );
}
}
void hz_disp128x32( unsigned char x, unsigned char y, unsigned char *hz )
{
unsigned char i;
for( i = 0; i < 128; i++ )
{
write_data( x + i, y, hz[ i] );
write_data( x + i, y + 1, hz[ 128 + i] );
write_data( x + i, y + 2, hz[ 256 + i] );
write_data( x + i, y + 3, hz[ 384 + i] );
}
}
void hz_disp12x12( unsigned char x, unsigned char y, unsigned char *hz )
{
unsigned char i;
for( i = 0; i < 12; i++ )
{
write_data( x + i, y, hz[ i] );
write_data( x + i, y + 1, hz[ 12 + i] );
}
}
void hz_disp12x120( unsigned char x, unsigned char y, unsigned char *hz )
{
unsigned char i;
for( i = 0; i < 12; i++ )
{
write_data( x + i, y, ~hz[ i] );
write_data( x + i, y + 1, ~hz[ 12 + i] );
}
}
//画点 x = 0 -- 128 y = 0 -- 64
void set_point( unsigned char x, unsigned char y )
{
unsigned char d = 0;
unsigned char temp =0;
unsigned char page1 = 0;
temp = y % 8;
if( x < 64 )
{
write_cmd_L( 0xB8 + (y/8) );
write_cmd_L( 0x40 + x );
d = Rddata();
write_cmd_L( 0xB8 + (y/8) );
write_cmd_L( 0x40 + x );
d = Rddata();
write_cmd_L( 0xB8 + (y/8) );
write_cmd_L( 0x40 + x );
page1 = d | (1<<temp);
write_dat_L( page1 );
}
else if( x <128 )
{
write_cmd_R( 0xB8 + (y/8) );
write_cmd_R( 0x40 + x -64 );
d = Rddata();
write_cmd_R( 0xB8 + (y/8) );
write_cmd_R( 0x40 + x -64 );
d = Rddata();
write_cmd_R( 0xB8 + (y/8) );
write_cmd_R( 0x40 + x - 64 );
page1 = d |(1<<temp);
write_dat_R( page1 );
}
else;
}
unsigned char Rddata( void )
{
unsigned char dd = 0;
DataLine = 0xff;
DI = 1;
RW = 1;
E = 1;
_nop_();
dd = DataLine;
E = 0;
return dd;
}
The-MCU-Communication-standard-keyboard-PS2.rar_mcu keyboard_ps2
版权申诉
6 浏览量
2022-09-20
16:22:41
上传
评论
收藏 62KB RAR 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- CocosDashboard-v2.1.3-win-042311.exe
- 基于yolov5和deepsort算法的车辆检测项目源码+数据集(高分项目).zip
- 基于YOLOv5+Deepsort实现车辆行人追踪和计数(完整源码+说明文档+数据).zip
- 150360364459673Pex10_9.py
- 74ls138译码器Multisim仿真设计
- 深度学习在图像分类任务中的应用
- 华为OD资源整理-包含华为OD概述,招聘流程等
- 基于BP神经网络的供热管道压力和温度预测(代码完整,数据齐全)
- 架空电力线弧垂计算公式
- 基于BP神经网络的四分类预测,基于RBF的四分类预测,基于GRNN的四分类预测,基于PNN的四分类预测
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0