📄 test140.c.bak
字号:
/***************************包含的头文件******************************/
#include <AT898252.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
#include <intrins.h>
/*****************************宏定义**********************************/
#define uchar unsigned char
#define uint unsigned int
/****************************端口声明*********************************/
#define wcadd1 XBYTE[0x0100] //写指令代码地址
#define wdadd1 XBYTE[0x0000] //写参数及显示数据地址
#define rdadd1 XBYTE[0x0100] //读参数及显示数据地址
#define rbadd1 XBYTE[0x0000] //读忙状态地址
/***************************函数的声明********************************/
void CCW1_PR(uchar O_X,uchar O_Y,uchar code_1); //汉字写入子程序(文本方式)
void INT_1(void); //液晶初始化子程序
void CGRAM(void); //CGRAM子程序函数
void CLEAR(void); //清屏子函数
void main(void); //液晶显示演示主函数
void delay_s(uchar x); //延时子程序
void display1(void); //黑白阴影显示子函数
void display2(void); //数字,英文显示子函数
/**************************全局变量的定义*****************************/
#define PARA 0x30
uchar SYSTAB[8]={0x30,0x87,0x07,0x27,0x42,0xf0,0x30,0x00}; //320240的SYSTEM SET参数
uchar SCRTAB[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00}; //320240的SCROLL参数
uchar CTAB1[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //数字0~9
uchar CTAB2[26]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,
0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,
0x55,0x56,0x57,0x58,0x59,0x5a}; //大写字母A~Z
uchar CTAB3[26]={0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,
0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,
0x75,0x76,0x77,0x78,0x79,0x7a}; //小写字母a~z
/* 文本方式下的汉字显示方法
在文本方式下显示汉字, 需要在SED1335 等显示RAM 内建立一个自定义字符库CGRAM,
然后通过在相应的单元写入相应的字符代码来实现汉字的显示.SED1335 等的字符代
码对应的是8x8 点阵的字符块, 而一个汉字需要四个8x8点阵的字符块组合显示, 所
以在建立汉字的CGRAM 时, 需要四个字符代码管理一个汉字, 一般是按左上部, 左下
部, 右上部和右下部四部分分配代码. 比如在演示程序中建立 "清华" 两个汉字的
CGRAM,那么这两个汉字的代码为80H(81H,82H,83H)和84H(85H,86H,87H).
*/
code uchar CGTAB[4][32]={0x00,0x40,0x37,0x10,0x83,0x60,0x2F,0x08, /* 清 */
0x13,0x22,0xE3,0x22,0x23,0x22,0x22,0x22,
0x40,0x48,0xFC,0x40,0xF8,0x40,0xFE,0x08,
0xFC,0x08,0xF8,0x08,0xF8,0x08,0x28,0x10,
0x04,0x04,0x08,0x08,0x18,0x29,0x4A,0x08, /* 华 */
0x09,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,
0x40,0x48,0x58,0x60,0xC0,0x40,0x44,0x44,
0x3C,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,
0x04,0xFF,0x05,0x41,0x33,0x14,0x01,0xF6, /* 蓬 */
0x1B,0x10,0x13,0x10,0x17,0x10,0x28,0x47,
0x44,0xFE,0x40,0xF8,0x10,0xE0,0x18,0x46,
0xF8,0x40,0xF8,0x40,0xFC,0x40,0x46,0xFC,
0x00,0x43,0x30,0x10,0x00,0x07,0xF1,0x11, /* 远 */
0x11,0x11,0x12,0x12,0x14,0x28,0x47,0x00,
0x10,0xF8,0x00,0x00,0x08,0xFC,0x20,0x20,
0x20,0x24,0x24,0x1C,0x00,0x06,0xFC,0x00 };
/************************液晶显示演示主函数***************************/
void main(void)
{
uchar code_1;
uint O_X,O_Y;
// delay_s(200);
INT_1(); //调初始化子程序
CGRAM(); //调CGRAM子程序
display1(); //黑白阴影显示子程序
CLEAR(); //清屏
CGRAM(); //调CGRAM子程序
delay_s(1);
code_1=0x80; //取字模
O_X=0x10;
O_Y=0x02;
CCW1_PR(O_X,O_Y,code_1); //调中文显示子程序(文本方式)
code_1=0x84; //取字模
O_X=0x12;
O_Y=0x02;
CCW1_PR(O_X,O_Y,code_1); //调中文显示子程序(文本方式)
code_1=0x88; //取字模
O_X=0x14;
O_Y=0x02;
CCW1_PR(O_X,O_Y,code_1); //调中文显示子程序(文本方式)
code_1=0x8c; //取字模
O_X=0x16;
O_Y=0x02;
CCW1_PR(O_X,O_Y,code_1); //调中文显示子程序(文本方式)
display2();
while(1);
}
/************************初始化子程序函数*****************************/
void INT_1()
{
uchar i;
CLEAR(); //调清屏子程序
wcadd1=0x40; //SYSTEM SET代码
for(i=0;i<8;i++)
{
wdadd1=SYSTAB[i]; //写入参数
}
wcadd1=0x44; //SCROLL代码
for(i=0;i<10;i++)
{
wdadd1=SCRTAB[i]; //写入参数
}
wcadd1=0x5a; //HDOT SCR 代码
wdadd1=0x00; //设置参数P1
wcadd1=0x5b; //OVLAY 代码
wdadd1=0x00; //设置参数:显示一,三区为文本属性
// delay_s(1);
// delay_s(200);
wcadd1=0x59; //显示状态设置
wdadd1=0x54; //设置参数:显示一~四区开显示
}
/****************************清屏子函数*******************************/
void CLEAR(void)
{
uint i,j;
wcadd1=0x4c; //CSRDIR 代码
wcadd1=0x46; //CSRW 代码
wdadd1=0x00; //设置参数光标指针低8位
wdadd1=0x00; //设置参数光标指针高8位
wcadd1=0x42; //MWRITE 代码
for(j=0;j<1638;j++) //清64K的显示存储器
{
for(i=0;i<40;i++) //写入一行
{
wdadd1=0x00; //写入数据
}
}
}
/*************************CGRAM子程序函数***************************/
void CGRAM(void)
{
uchar i,j;
wcadd1=0x5c; //CGRAMADR 代码
wdadd1=0x00; //设置SAG=0x3000
wdadd1=0x30;
wcadd1=0x46; //CSRW 代码
wdadd1=0x00; //设置CSR=0x3400(字符代码=80H)
//CSR=SAG+8*80H
wdadd1=0x34;
wcadd1=0x4c; //CSRDIR 代码
wcadd1=0x42; //MWRITE 代码
for(j=0;j<4;j++)
{
for(i=0;i<32;i++)
{
wdadd1=CGTAB[j][i]; //写入字模数据
}
}
delay_s(1);
for(j=0;j<8;j++) //8*8的空白,字符代码为90H
{
wdadd1=0x00;
}
delay_s(1);
for(j=0;j<8;j++) //8*8的阴影,字符代码为91H
{
wdadd1=0xff;
}
delay_s(1);
}
/**********************写汉字子程序(文本)函数***********************/
void CCW1_PR(uint O_X,uint O_Y,uchar code_1)
{
uint i,j;
i=PARA;
j=i*O_Y+O_X;
wcadd1=0x4f; //CSRDIR 代码(下移)
wcadd1=0x46; //CSRW 代码
wdadd1=j%256; //设置光标地址
wdadd1=j/256;
wcadd1=0x42; //MWRITE 代码
wdadd1=code_1; // 写入汉字代码
wdadd1=code_1+1; // 写入汉字代码
j++;
wcadd1=0x46; // CSRW 代码
wdadd1=j%256; // 设置光标地址
wdadd1=j/256;
wcadd1=0x42; // MWRITE 代码
wdadd1=code_1+2; // 写入汉字代码
wdadd1=code_1+3; // 写入汉字代码
}
/**************************黑白阴影显示子程序**********************/
void display1(void)
{
uint z;
uchar w=0;
uchar i,j,n=0;
uchar O_X,O_Y;
wcadd1=0x4C; //CSRDIR 代码(右移)
while(n<=30)
{
for(i=0;i<30-n;i++)
{
w=i%2;
// w=w+(i%2);
O_X=0;
O_Y=i;
z=PARA*O_Y+O_X;
wcadd1=0x46; //CSRW 代码
wdadd1=z%256; //设置光标地址
wdadd1=z/256;
wcadd1=0x42; //MWRITE 代码
for(j=0;j<20;j++)
{
if(n%2==0)
{
if(w==0)
{
wdadd1=0x90;
wdadd1=0x91;
}
else
{
wdadd1=0x91;
wdadd1=0x90;
}
}
else
{
if(w!=0)
{
wdadd1=0x90;
wdadd1=0x91;
}
else
{
wdadd1=0x91;
wdadd1=0x90;
}
}
}
}
// for(i=30-n;i<30;i++)
{
O_X=0;
O_Y=30-n;
z=PARA*O_Y+O_X;
wcadd1=0x46; //CSRW 代码
wdadd1=z%256; //设置光标地址
wdadd1=z/256;
wcadd1=0x42; //MWRITE 代码
for(j=0;j<40;j++)
{
wdadd1=0x90;
}
}
delay_s(200);
delay_s(200);
delay_s(200);
delay_s(200);
delay_s(200);
n++;
}
}
/*************************数字,英文显示子函数*********************/
void display2(void)
{
uint z;
uchar i;
uchar O_X,O_Y;
O_X=0x0f; //显示数字0~9
O_Y=0x0c;
z=PARA*O_Y+O_X;
wcadd1=0x46; //CSRW 代码
wdadd1=z%256; //设置光标地址CSR
wdadd1=z/256;
wcadd1=0x4c; //CSRDIR 代码
wcadd1=0x42; //MWRITE 代码
for(i=0;i<10;i++)
{
wdadd1=CTAB1[i]; //写入数据
}
O_X=0x07; //显示英文A~Z
O_Y=0x0e;
z=PARA*O_Y+O_X;
wcadd1=0x46; //CSRW 代码
wdadd1=z%256; //设置光标地址CSR
wdadd1=z/256;
wcadd1=0x4c; //CSRDIR 代码
wcadd1=0x42; //MWRITE 代码
for(i=0;i<26;i++)
{
wdadd1=CTAB2[i]; //写入数据
}
O_X=0x0d;
O_Y=0x08;
z=PARA*O_Y+O_X;
wcadd1=0x46; //CSRW 代码
wdadd1=z%256; //设置光标地址CSR
wdadd1=z/256;
wcadd1=0x4c; //CSRDIR 代码
wcadd1=0x42; //MWRITE 代码
wdadd1=0x54;
wdadd1=0x45;
wdadd1=0x4c;
wdadd1=0x3a;
wdadd1=0x30;
wdadd1=0x32;
wdadd1=0x33;
wdadd1=0x2d;
wdadd1=0x36;
wdadd1=0x33;
wdadd1=0x35;
wdadd1=0x33;
wdadd1=0x35;
wdadd1=0x32;
wdadd1=0x39;
wdadd1=0x32;
}
/***************************延时子函数*****************************/
void delay_s(uchar x)
{
uchar i;
while(x>0)
{
for(i=200;i>0;i--)
{}
x--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -