📄 新建 文本文档.txt
字号:
///////////////////////////////////////////////////////
main.c
#include "p.h"
unsigned char code bmp1[]={ //
//********************************************************// //
//***** 转换的文件:E:\!Program\!BmpSample\12832_12232.bmp //
//***** 源图形宽度 * 高度:128 * 32 //
//***** 调整后宽度 * 高度:128 * 32 //
//***** 字模格式:横向取模,冗余模式,字节正序,正色取模, //
//***** 点阵转换时间:2005/03/15 13:37:14 // /
//***** 位图点阵占用512字节 //
//********************************************************// //
//
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, //
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, //
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, //
0x80,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x41, //
0x80,0x00,0x00,0x30,0x00,0xE0,0xF0,0x00,0x18,0x30,0x00,0x07,0x18,0x00,0x00,0x41, //
0x80,0x00,0x00,0x7F,0x80,0x63,0xCF,0xF0,0x18,0x30,0x30,0x06,0x18,0x00,0x00,0x41, //
0x80,0x03,0xFF,0x7F,0xE0,0x76,0x0C,0x30,0x1C,0x30,0x60,0x66,0x3F,0xFE,0x00,0x41, //
0x80,0x00,0x07,0xC0,0 x60,0x3E,0x18,0x60,0x1C,0x60,0xC0,0x6C,0x30,0x00,0x00,0x41,
0x80,0x00,0x06,0xCC,0xE0,0x0C,0x18,0x60,0x0C,0x61,0x80,0xCC,0x60,0x00,0x00,0x41,
0x80,0x03,0x07,0x98,0xC0,0x0C,0x38,0xE0,0x0C,0xE3,0x00,0xCC,0xCC,0x00,0x00,0x41,
0x80,0x03,0x0D,0x99,0xC0,0x1C,0x30,0xC0,0x0C,0xC6,0x00,0xD8,0xCF,0x00,0x00,0x41,
0x80,0x03,0x1F,0x19,0x87,0xD8,0x30,0xC0,0x00,0xC0,0x01,0x99,0x83,0x80,0x00,0x41,
0x80,0x03,0x9F,0x33,0x00,0xD8,0x71,0xC3,0xFF,0xFF,0xF1,0x9B,0x01,0xC0,0x00,0x41,
0x80,0x01,0xB0,0x37,0x01,0xF8,0x61,0x80,0x0C,0x30,0x01,0xB6,0x00,0xE0,0x00,0x41,
0x80,0x01,0xE0,0x70,0x01,0xB0,0x61,0x80,0x0C,0x70,0x03,0x30,0x00,0x00,0x00,0x41,
0x80,0x01,0xE0,0x70,0x01,0xB0,0xE3,0x80,0x1C,0x60,0x03,0x33,0xFF,0xC0,0x00,0x41,
0x80,0x01,0xC0,0xF0,0x03,0x60,0xC3,0x00,0x18,0x60,0x03,0x67,0x18,0xC0,0x00,0x41,
0x80,0x03,0xC1,0xF0,0x03,0x67,0xC3,0x00,0x30,0xE0,0x06,0x66,0x30,0xC0,0x00,0x41,
0x80,0x07,0xC3,0xB0,0x03,0x7F,0xC7,0x00,0x30,0xC0,0x06,0x6E,0x30,0xC0,0x00,0x41,
0x80,0x0E,0 xE3,0x30,0x06,0x71,0xF6,0x00,0x60,0xC0,0xC6,0xCC,0x31,0x80,0x00,0x41,
0x80,0x1C,0xE6,0x38,0x06,0x01,0xBC,0x00,0xC1,0xC1,0x8C,0xCC,0x61,0x80,0x00,0x41,
0x80,0x38,0xEC,0x38,0x0F,0x03,0x80,0x01,0x81,0x81,0x8C,0xD8,0x61,0x80,0x00,0x41,
0x80,0x60,0x78,0x18,0x1B,0x83,0x00,0x07,0x01,0x83,0x0D,0x98,0x63,0x00,0x00,0x41,
0x80,0xC0,0x70,0x1C,0x71,0xC6,0x00,0x1E,0x03,0x87,0x01,0x98,0xC3,0x00,0x00,0x41,
0x80,0x00,0xE0,0x0C,0xE0,0xFF,0xFE,0x38,0x01,0xFE,0x01,0x9F,0xFE,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
unsigned char code str1[]="松山电子欢迎您!内含八千汉字库。";
unsigned char code str2[]="12345678901234567890123456789012";
unsigned char code str3[]={0xb0,0xa1,0xb0,0xb2,0xbf,0xc6,0xc3,0xb3,0,};
void test_key()
{
if(BUTTON_1==0) key_bak=1;
if(BUTTON_2==0) key_bak=2;
if(BUTTON_3==0) key_bak=3;
if(BUTTON_4==0) key_bak=4;
}
void wait_button()
{
delay(200);
while(BUTTON_1==0 || BUTTON_2==0 || BUTTON_3==0 || BUTTON_4==0)
{
watch_dog();
}
}
main()
{
LCD_E1=1;
LCD_RST=1;
delay(500);
LCD_RST=0;
delay(500);
LCD_RST=1;
delay(500);
///////////////////////////////////////////////
// delay(100); //等待复位
LcmInit();
scroll=0;
sel=0;
PCB_Address = readSys(XADD_ADD) ;
SendEnable=0;
key_bak=0;
TMOD=0x20; /* 设定定时器T1的工作方式为方式2 */
TH1=0xfd; TL1=0xfd;
TH0=0x13; TL0=0x38; /* 6ms */
SCON=0x78; /*串行口设定*/
PCON = 0; //0x80; //改为9600
TR1 = 1; /* 启动定时器T1 */
ES = 1; /* 打开串口中断 */
REN = 1; /* 使能接收 */
EA = 1; /* 打开系统的中断 */
LcmClearTXT();
LcmClearBMP();
while(1)
{
delay(800);
test_key();
delay(800);
test_key();
if(sel==0)
{
LcmClearTXT();
// PutBMP(bmp1);
// delay(80000);
// DisplayDots(0x55); //xiao ma dian
// delay(80000);
LcmClearBMP();
PutStr(0,0,str1);
delay(80000);
//LcmClearTXT();
//ReadDemo();
//DelayKey(1,5);
LcmClearTXT();
DisplayDots(0xaa); // xiao ma dian
delay(90000);
/////////////////////////////////////////////////
// disLogo(sel,scroll++);
// if(scroll==122) delay(100000);
}
else
{
if(sel!=0xFF)
{
disLogo(sel,122);
if(sel==6)
{
disNum(dis_val);
}
sel=0xFF;
}
}
}
}
/////////////////////////////////////////////////////////////////////
lcd.c
#include "p.h"
unsigned char code AC_TABLE[]={ //
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置 //
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置 //
};
void LCD_cmd(unsigned char v) // WRITE COMMAND
{
//CheckBusy();
LCD_A0=0;
LCD_RW=0;
LCD_DATA=v;
LCD_E2=1;
delay(10);
LCD_E2=0;
delay(10);
}
void LCD_out(unsigned char v) // WRITE DATA1
{
// CheckBusy();
// delay(100);
LCD_A0=1;
LCD_RW=0;
// LCD_DATA=v;
LCD_DATA=v;
LCD_E2=1;
delay(50);
LCD_E2=0;
delay(50);
}
void LcmInit( void )
{
LCD_cmd(0x30); //8BitMCU,基本指令集合 DL=1,RE=0;
LCD_cmd(0x03); //AC归0,不改变DDRAM内容
LCD_cmd(0x0C); //显示ON,游标OFF,游标位反白OFF
LCD_cmd(0x01); //清屏,AC归0
LCD_cmd(0x06); //写入时,游标右移动
}
//////////图形区和文本区显示在两个不同的RAM////////////////////////// //
//文本区清RAM函数
void LcmClearTXT( void ) //
{ //
unsigned char i; //
LCD_cmd(0x30); //8BitMCU,基本指令集合 //
LCD_cmd(0x80); //AC归起始位, sheding DDRAM add TO AC; //
for(i=0;i<64;i++) //
LCD_out(0x20); //??????? //
} //
//图形区清RAM函数 //
void LcmClearBMP( void ) //
{ //
unsigned char i,j; //
LCD_cmd(0x34); //8Bit扩充指令集,即使是36H也要写两次 //
LCD_cmd(0x36); //绘图ON,基本指令集里面36H不能开绘图 //
for(i=0;i<32;i++) //12864实际为256x32 //
{ //
LCD_cmd(0x80|i); //行位置 //
LCD_cmd(0x80); //列位置 //
for(j=0;j<32;j++) //256/8=32 byte //
LCD_out(0); //
} //
} //
////////////////////////////////////////////////////////////////////////
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
LCD_cmd(0x30); //8BitMCU,基本指令集合
LCD_cmd(AC_TABLE[8*row+col]); //起始位置
while(*puts != '\0') //判断字符串是否显示完毕
{
if(col==8) //判断换行
{ //若不判断,则自动从第一行到第三行
col=0;
row++;
}
if(row==2) row=0; //一屏显示完,回到屏左上角
LCD_cmd(AC_TABLE[8*row+col]);
LCD_out(*puts); //一个汉字要写两次
// LCD_out(0xb0);
puts++;
LCD_out(*puts);
// LCD_out(0xa1);
puts++;
col++;
}
}
void PutBMP(unsigned char *puts)
{
unsigned int x=0;
unsigned char i,j;
LCD_cmd(0x34); //8Bit扩充指令集,即使是36H也要写两次
LCD_cmd(0x36); //绘图ON,基本指令集里面36H不能开绘图
for(i=0;i<32;i++) //12864实际为256x32
{
LCD_cmd(0x80|i); //行位置
LCD_cmd(0x80); //列位置
for(j=0;j<16;j++) //122/8=15.25=16(只能为整数)
{ //列位置每行自动增加
LCD_out(puts[x]);
x++;
}
}
}
//松山电子测试用点阵显示
void DisplayDots(unsigned char DotByte)
{
unsigned char i,j;
LCD_cmd(0x34); //8Bit扩充指令集,即使是36H也要写两次
LCD_cmd(0x36); //绘图ON,基本指令集里面36H不能开绘图
for(i=0;i<32;i++) //12864实际为256x32
{
LCD_cmd(0x80|i); //行位置
LCD_cmd(0x80); //列位置
for(j=0;j<16;j++) //122/8=15.25=16(只能为整数)
{ //列位置每行自动增加
LCD_out(DotByte);
}
DotByte=~DotByte;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -