标题:
无字库12864单片机程序(纵向取模,字节倒序)带仿真
[打印本页]
作者:
top潮流
时间:
2017-11-30 09:28
标题:
无字库12864单片机程序(纵向取模,字节倒序)带仿真
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(14.9 KB, 下载次数: 83)
下载附件
2017-12-1 01:56 上传
0.png
(3.67 KB, 下载次数: 73)
下载附件
2017-12-1 01:56 上传
单片机源程序如下:
/***********************************************************************
内容:无字库12864测试程序(纵向取模。字节倒序)
***********************************************************************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define Disp_On 0x3f //显示命令
#define Disp_Off 0x3e //关闭命令
#define Col_Add 0x40 //起始列地址
#define Page_Add 0xb8 //起始页地址
#define Start_Line 0xc0 //起始行地址
#define Lcd_Bus P0 //MCU P0<---> LCM
sbit RS = P2^0; //RS=1时为数据操作,RS=0时为命令操作
sbit RW = P2^1; //RW=1时为读选通,RW=0时为写选通
sbit E = P2^2; //E下降沿时,数据写入驱动器,E为高电平时,数据被读出
sbit Mcs = P2^3; //Master chip E,右半屏-CS2
sbit Scs = P2^4; //Slave chip E,左半屏-CS1
sbit RST = P2^5; //液晶模块复位控制管脚
char code ce[] = {
/*-- 文字: 测 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08, 0x31, 0x86, 0x60, 0x00, 0xFE, 0x02, 0xF2, 0x02, 0xFE, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00,
0x04, 0xFC, 0x03, 0x00, 0x80, 0x47, 0x30, 0x0F, 0x10, 0x67, 0x00, 0x07, 0x40, 0x80, 0x7F, 0x00
};
char code shi[] = {
/*-- 文字: 试 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
…………限于本文篇幅 余下代码请从51黑下载附件…………
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/*---------------------延时子程序----------------------------*/
void delay(unsigned int t)
{
unsigned int i, j;
for (i = 0;i < t;i++)
for (j = 0;j < 10;j++)
{
;
}
}
/*--------------------读忙碌子程序---------------------------*/
void Read_busy()
{
P0 = 0x00;
RS = 0;
RW = 1;
E = 1;
while(P0&0x80);
E = 0;
}
/*--------------------写命令到LCD----------------------------*/
void write_com(unsigned char cmdcode)
{
Read_busy(); //每次读写都要判断是否忙碌
RS = 0;
RW = 0;
Lcd_Bus = cmdcode;
delay(0);
E = 1;
delay(0);
E = 0;
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
Read_busy(); //每次读写都要判断是否忙碌
RS = 1;
RW = 0;
Lcd_Bus = Dispdata;
delay(0);
E = 1;
delay(0);
E = 0;
}
/*------------------显示边框-------------------------------*/
void frame()
{
unsigned char i;
Mcs = 0; //两个屏幕
Scs = 0;
/*********************************************************************/
write_com(Page_Add + 0); //上面横线
write_com(Col_Add + 0);
for (i = 0;i < 64;i++) write_data(0x01);
/*********************************************************************/
write_com(Page_Add + 7); //下面横线
write_com(Col_Add + 0);
for (i = 0;i < 64;i++) write_data(0x80);
/*********************************************************************/
for (i = 0;i < 8;i++)
{
Mcs = 0; //右半屏
Scs = 1;
write_com(Page_Add + i); //共8页
write_com(Col_Add + 63); //最后一列
write_data(0xff); //ff表示每页的8行全亮
Mcs = 1; //左半屏与右半屏类似
Scs = 0;
write_com(Page_Add + i);
write_com(Col_Add + 0);
write_data(0xff);
}
}
/*---------------------------清除内存--------------------------------*/
void Clr_Scr()
{
unsigned char j, k;
for (k=0;k<8;k++)
{
Mcs = 1;Scs = 0;delay(10); //左半屏清屏
write_com(Page_Add + k);
write_com(Col_Add + 0);
for (j = 0;j < 64;j++) write_data(0x00);
Mcs = 0;Scs = 1; delay(10); //右半屏清屏
write_com(Page_Add + k);
write_com(Col_Add + 0);
for (j = 64;j < 128;j++) write_data(0x00);
}
}
/*------------------显示12864图片---------------------------*/
void Disp_Img(unsigned char code *img)
{
unsigned char j, k;
for (k = 0;k < 8;k++) //共8页
{
Mcs = 1;Scs = 0;delay(10); //左半屏数据
write_com(Page_Add + k);
write_com(Col_Add + 0);
for (j = 0;j < 64;j++) write_data(img[k*128 + j]); //每半块屏共64列
Mcs = 0;Scs = 1; delay(10); //右半屏数据
write_com(Page_Add + k);
write_com(Col_Add + 0);
for (j = 64;j < 128;j++) write_data(img[k*128 + j]);
}
}
/*-------------------------显示横---------------------------*/
void Disp_H_Line()
{
unsigned char i, j;
Mcs = 0;
Scs = 0;
write_com(Disp_On); //显示开
write_com(Page_Add); //页地址
write_com(Start_Line); //开始行
write_com(Col_Add); //列地址
for (j = 0;j < 8;j++) //共8页,所以循环8次
{
write_com(Page_Add + j);
write_com(Col_Add + 0); //第一列开始
write_com(Start_Line+0); //第一行开始
for (i = 0;i < 64;i++)write_data(0x55); //每半屏幕共64列
}
}
/*------------------------显示列-----------------------------*/
void Disp_V_Line()
{
unsigned char i, j;
write_com(Disp_On); //显示开
write_com(Page_Add); //页地址
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
LCD12864测试程序.rar
(75.98 KB, 下载次数: 36)
2017-11-30 09:27 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1