📄 12864._c
字号:
//*****************利用LCD液晶显示图形和文字******************//
#include <iom16v.h>
#include <macros.h>
#include "delay.h"
#define LCD12864 TRUE
//************数据端口为PA1,时钟端口为PA3********************//
#define LCD_DATAL PORTA&=~BIT(1)
#define LCD_DATAH PORTA|=BIT(1)
#define LCD_CLKL PORTA&=~BIT(3)
#define LCD_CLKH PORTA|=BIT(3)
/*******************************************************/
/****** 函数名称: lcd_out ******/
/****** 功 能: 将每一位送入到LCD中 ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void lcd_out(unsigned char send_byte)
{
unsigned char i,s;
for (i=0;i<8;i++)
{
if((send_byte&0x80)==0)
{
LCD_DATAL;
}
else
{
LCD_DATAH;
} //送数据
LCD_CLKL;
LCD_CLKH;
send_byte=send_byte<<1;
}
delay(256);
}
/*******************************************************/
/****** 函数名称: WR_dat ******/
/****** 功 能: 将数据写入LCD ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void WR_dat(unsigned char dat)
{
unsigned char s;
s=dat&0xf0;
lcd_out(0xfa);
lcd_out(s);
s=dat&0x0f;
s<<=4;
lcd_out(s);
}
/*******************************************************/
/****** 函数名称: WR_control ******/
/****** 功 能: 将指令写入LCD ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void WR_control(unsigned char dat)
{
unsigned char s;
s=dat&0xf0;
lcd_out(0xf8);
lcd_out(s);
s=dat&0x0f;
s<<=4;
lcd_out(s);
}
/*******************************************************/
/****** 函数名称: lcd_control ******/
/****** 功 能:使用整体显示,基本指令集 ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void lcd_control()
{
WR_control(0x30);
WR_control(0x0C);
}
/*******************************************************/
/****** 函数名称: lcd_clear() ******/
/****** 功 能: 清屏 ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void lcd_clear()
{
int i;
WR_control(0x01);
for(i=0;i<5000;i++) // 延时5ms
{
asm("nop");
asm("nop");
}
}
/*******************************************************/
/****** 函数名称: LCD_set_xy() ******/
/****** 功 能: 设置LCD显示坐标 ******/
/****** 参 数: 显示字符串的位置,X:0-15,Y:0-1*****/
/****** 返回值 : 无 ******/
/*******************************************************/
void LCD_address( unsigned char x, unsigned char y )
{
unsigned char address;
switch(x)
{
case 0:
address = 0x80 + y; //计算显示地址
break;
case 1:
address = 0x90 + y; //计算显示地址
break;
case 2:
address = 0x88 + y; //计算显示地址
break;
case 3:
address = 0x98 + y; //计算显示地址
break;
default:address = 0x80 + y;
}
WR_control( address); //写地址命令
}
/*******************************************************/
/****** 函数名称: LCD_write_string() ******/
/****** 功 能: 中英文字符串显示函数 ******/
/****** 参 数: *s--英文字符串指针 ******/
/****** X、Y--显示字符串的位置 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
LCD_address( X, Y ); //写显示地址
while (*s) //是否到字符串尾
{
WR_dat (*s ); //写显示数据
s ++; //字符串地址加1
}
}
/******************************************************************************/
//函数功能:将BCD码转换为ASCII码函数
//输入数据:BCD
//输出:ASCII
//详见SCII码表
/******************************************************************************/
unsigned char BCD_ASCII(unsigned char bcd)
{
bcd &= 0x0F;
if(bcd > 9)
bcd +=('7'); // 将A~F转换为ASCII
else
bcd += '0'; // 将0~9转换为ASCII 0~9
return(bcd);
}
/*******************************************************/
/****** 函数名称: LCD_writeasc ******/
/****** 功 能: 输入ASCII码显示对应的字符 ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void LCD_writeasc(unsigned char x, unsigned char y, unsigned char data)
{
LCD_address(x,y);
WR_dat(data);
}
/*******************************************************/
/****** 函数名称: Lcd_INT() ******/
/****** 功 能: LCD初始化 ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void Lcd_INT()
{
DDRA|=BIT(1);
DDRA|=BIT(3);
lcd_control();
lcd_clear();
}
/*******************************************************/
/****** 函数名称: lcd_writechar ******/
/****** 功 能: 输入10进制数转化为16进制数 ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void lcd_writechar(unsigned char X,unsigned char Y,unsigned char number)
{
LCD_address(X,Y);
WR_dat(BCD_ASCII(number>>4));
WR_dat(BCD_ASCII(number));
}
void lcd_write2(unsigned char X,unsigned char Y,unsigned char number)
{
LCD_address(X,Y);
WR_dat(BCD_ASCII(number%100/10));
WR_dat(BCD_ASCII(number%10));
}
//#if LCD12864==TRUE //条件编译指令
//#pragma data:code //指定存储位置为Flash
const unsigned char Bitmap[]={/*-- 宽度x高度=128x64图像 --*/
0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x06,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xFE,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x01,0xFF,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0xFC,0x00,0x00,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFF,0xF0,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x08,0x00,0x04,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0xF0,0x09,0xE0,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x60,0x00,0x08,0x20,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x40,0x00,0x08,0x20,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0xC0,0x00,0x0F,0xE0,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x3F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x20,0x0F,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFC,0x00,0x40,0x01,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x80,0x01,0x00,0x00,0x00,
0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x06,0x20,0x01,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x03,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0x9F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x3C,0x0C,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x0F,0xC0,0x00,0x00,0x00,0x24,0x30,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x24,0x40,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xE4,0x80,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x80,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x1E,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x03,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x00,0x00,0x55,0x00,0x89,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/*******************************************************/
/****** 函数名称: ShowBmp() ******/
/****** 功 能: 显示一幅128*64的BMP位图 ******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void ShowBmp(void)
{
unsigned int i,a,x=0,y=0;
WR_control(0x34); //关闭绘图显示功能
for(a=0;a<32;a++)
{
WR_control(0x80+a);
WR_control(0x80);
for(i=0;i<8;i++)
{
WR_dat(Bitmap[y+x]);
WR_dat(Bitmap[y+x+1]);
x+=2;
}
x=0;
for(i=0;i<8;i++)
{
WR_dat(Bitmap[512+y+x]);
WR_dat(Bitmap[512+y+x+1]);
x+=2;
}
x=0;
y+=16;
}
WR_control(0x36); //打开绘图显示功能
delay_nus(80);
WR_control(0x30); //基本指令
delay_nus(80);
}
//#endif
//条件编译结束
void main()
{
Lcd_INT();
//LCD_writeasc(2,1,64);
//lcd_writechar(3,1,16);
//lcd_write2(0,0,12);
//LCD_Write_string(1,4,"45445");
ShowBmp();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -