main.c
来自「开发板2407带的程序用C语言编写的」· C语言 代码 · 共 486 行
C
486 行
/*Main.c*/
/*sed1520液晶测试程序*/
#include "global.c"
void SystemInit();
void Init_Lcd(void);
void KickDog();
void Init_Lcd(void);
void Clr_Lcd(void);
void Judge1_Ready(void);
void Lcd_Delay(void);
void Lcd_Delay1(void);
void Write1_Code(void);
void Write2_Code(void);
void Write1_Data(void);
void Write2_Data(void);
void ShowChar(unsigned char,unsigned char,unsigned char);
void ShowHZ(unsigned char,unsigned char,unsigned int);
void Show_Test();
unsigned int temp1,temp2;
//unsigned long code_addr1,code_addr2,data_addr1,data_addr2;
unsigned long ch1[][16]={{0x1F,0x10,0x00,0x1F,0x00,0x10,0x1F,0x00,0xC0,0x3C,0xE0,0x00,0xE0,0x3C,0xC0,0x00}, /*W*/
{0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,0x04,0xFC,0x04,0x04,0xC4,0x04,0x18,0x00}, /*E*/
{0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0x04,0x04,0x04,0x04,0x0C,0x00}, /*L*/
{0x03,0x0C,0x10,0x10,0x10,0x10,0x1C,0x00,0xE0,0x18,0x04,0x04,0x04,0x08,0x10,0x0}, /*C*/
{0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00}, /*O*/
{0x10,0x1F,0x1F,0x00,0x1F,0x1F,0x10,0x00,0x04,0xFC,0x00,0xFC,0x00,0xFC,0x04,0x00}, /*M*/
{0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,0x04,0xFC,0x04,0x04,0xC4,0x04,0x18,0x00} /*E*/
};
unsigned long ch2[][32]={{0x28,0x24,0x22,0x21,0x26,0x38,0x04,0x18,0xF0,0x17,0x10,0x10,0x14,0x18,0x10,0x00,0x04,0x08,0x32,0xC2,0xC2,0x34,0x04,0x08,0x30,0xC0,0x60,0x18,0x0C,0x06,0x04,0x00}, /*欢*/
{0x02,0x82,0x73,0x20,0x00,0x3F,0x20,0x40,0x40,0x3F,0x20,0x20,0x20,0x3F,0x00,0x00,0x02,0x04,0xF8,0x04,0x02,0xE2,0x42,0x82,0x02,0xFA,0x02,0x42,0x22,0xC2,0x02,0x00}, /*迎*/
{0x01,0x02,0x0F,0x34,0xC2,0x04,0x19,0xF0,0x50,0x17,0x10,0x11,0x14,0x38,0x10,0x00,0x00,0x00,0xFE,0x00,0x08,0x30,0xC0,0x84,0x02,0xFC,0x00,0x00,0xC0,0x38,0x10,0x00} /*你*/
};
//4000和2000交换
main()
{
SystemInit(); //系统初始化
MCRA=MCRA & 0xC0FF; //IOPB0-6设为IO口模式
PBDATDIR=0xFFC2; //所有LED=0
PBDATDIR=PBDATDIR |0x0004; //第一个灯亮
Init_Lcd();
Show_Test();
while(1);
}
void SystemInit()
{
asm(" SETC INTM "); /* 关闭总中断 */
asm(" CLRC SXM "); /* 禁止符号位扩展 */
asm(" CLRC CNF "); /* B0块映射为 on-chip DARAM*/
asm(" CLRC OVM "); /* 累加器结果正常溢出*/
SCSR1=0x83FE; /* 系统时钟CLKOUT=20*2=40M */
/* 打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=40M */
WDCR=0x006F; /* 禁止看门狗,看门狗时钟64分频 */
KickDog(); /* 初始化看门狗 */
IFR=0xFFFF; /* 清除中断标志 */
IMR=0x0000; /* 打开中断2*/
}
void Lcd_Delay()
{
unsigned int i=1;
unsigned int j=10;
while(i--)
{
while(j--){;}
}
}
void Lcd_Delay1()
{
unsigned int i=1;
unsigned int j=10000;
while(i--)
{
while(j--){;}
}
}
void Init_Lcd()
{
data3=0x0E2; /*RESET*/
data3=0x0E2;
Write1_Code();
Write2_Code();
data3=0x0AF; //关显示
Write1_Code();
Write2_Code();
data3=0x0A4; //退出休闲模式
Write1_Code();
Write2_Code();
data3=0x0A9; //占空比选择
Write1_Code();
Write2_Code();
data3=0x0A1; //ADC排序选择
Write1_Code();
Write2_Code();
data3=0x0EE; //关闭修改状态
Write1_Code();
Write2_Code();
data3=0x000; //起始列选择
Write1_Code();
Write2_Code();
data3=0x0C0; //起始行设置
Write1_Code();
Write2_Code();
data3=0x0AF; //开显示
Write1_Code();
Write2_Code();
Clr_Lcd();
}
void Clr_Lcd()
{
int i,j,p;
p=0x0B8;
data3=p; //页设置
Write1_Code();
Write2_Code();
for(j=4;j>0;j--)
{
data3=0x0; //起始列选择
Write1_Code();
Write2_Code();
for(i=80;i>0;i--)
{
data1=0x0;
Write2_Data();
Write1_Data();
}
data3=++p; //换页
Write1_Code();
Write2_Code();
}
Lcd_Delay();
p=0x0B8;
data3=p; //页设置
Write1_Code();
Write2_Code();
for(j=4;j>0;j--)
{
data3=0x0; //起始列选择
Write1_Code();
Write2_Code();
for(i=80;i>0;i--)
{
data1=0x00;
Write1_Data();
Write2_Data();
//Lcd_Delay1();
}
data3=++p;
Write1_Code();
Write2_Code();
}
Lcd_Delay();
}
void Show_Test()
{
int i,j,k=0; //k用于抗干扰
data3=0x0AF; //开显示
Write1_Code();
Write2_Code();
/*先写字符*/
data3=0x0B9; //页设置
Write2_Code();
data3=0x0Ba; //页设置,解决抗干扰问题
Write1_Code();
data3=0x0; //起始列设置,解决抗干扰问题
Write1_Code();
k=0x13;
data3=0x13; //起始列选择,ADC=1,起始列从19列开始
Write2_Code();
for(i=0;i<7;i++) /*写字符上半部分,7个字符,将字符写在右屏*/
{
data3=0x0; //列设置,解决抗干扰问题
Write1_Code();
data3=k;
Write2_Code();
for(j=0;j<8;j++)
{
data1=ch1[i][j];
Write2_Data();
k++;
}
}
data3=0x0B8; //页设置,换页写时需注意调整列来书写
Write2_Code();
k=0x13;
data3=0x13; //起始列选择,ADC=1,起始列从19列开始
Write2_Code();
for(i=0;i<7;i++) /*写字符下半部分,将字符写在左屏*/
{
data3=0x0; //列设置,解决抗干扰问题
Write1_Code();
data3=k;
Write2_Code();
for(j=0;j<8;j++)
{
data1=ch1[i][j+8];
Write2_Data();
k++;
}
}
data3=0x0B9; //页设置
Write1_Code();
data3=0x0Ba; //页设置,解决抗干扰问题
Write2_Code();
data3=0x0; //起始列设置,解决抗干扰问题
Write2_Code();
k=0x13;
data3=0x13; //起始列选择,ADC=1,起始列从19列开始
Write1_Code();
for(i=0;i<7;i++) /*写字符上半部分,7个字符,将字符写在左屏*/
{
data3=0x0; //列设置,解决抗干扰问题
Write2_Code();
data3=k;
Write1_Code();
for(j=0;j<8;j++)
{
data1=ch1[i][j];
Write1_Data();
k++;
}
}
data3=0x0B8; //页设置,换页写时需注意调整列来书写
Write1_Code();
k=0x13;
data3=0x13; //起始列选择,ADC=1,起始列从19列开始
Write1_Code();
for(i=0;i<7;i++) /*写字符下半部分,将字符写在左屏*/
{
data3=0x0; //列设置,解决抗干扰问题
Write2_Code();
data3=k;
Write1_Code();
for(j=0;j<8;j++)
{
data1=ch1[i][j+8];
Write1_Data();
k++;
}
}
/*以下为显示汉字*/
data3=0x0Bb; //页设置
Write2_Code();
data3=0x0B8; //页设置,解决抗干扰问题
Write1_Code();
data3=0x0; //起始列设置,解决抗干扰问题
Write1_Code();
k=0x13;
data3=0x13; //起始列选择,ADC=1,起始列从19列开始
Write2_Code();
for(i=0;i<3;i++)
{
data3=0x0; //列设置,解决抗干扰问题
Write1_Code();
data3=k;
Write2_Code();
for(j=0;j<8;j++) /*写汉字左上部分,将汉字写在右屏*/
{
data1=ch2[i][j];
Write2_Data();
k++;
}
for(j=0;j<8;j++) /*写汉字右上部分*/
{
data1=ch2[i][j+8];
Write2_Data();
k++;
}
}
data3=0x0Ba; //页设置,换页写时需注意调整列来书写
Write2_Code();
data3=0x0B8; //页设置,解决抗干扰问题
Write1_Code();
data3=0x0; //起始列设置,解决抗干扰问题
Write1_Code();
k=0x13;
data3=0x13; //起始列选择,ADC=1,起始列从19列开始
Write2_Code();
for(i=0;i<3;i++)
{
data3=0x0; //列设置,解决抗干扰问题
Write1_Code();
data3=k;
Write2_Code();
for(j=0;j<8;j++) /*写汉字左下部分*/
{
data1=ch2[i][j+16];
Write2_Data();
k++;
}
for(j=0;j<8;j++) /*写汉字右下部分*/
{
data1=ch2[i][j+24];
Write2_Data();
k++;
}
}
data3=0x0Bb; //页设置
Write1_Code();
data3=0x0B8; //页设置,解决抗干扰问题
Write2_Code();
data3=0x0; //列设置,解决抗干扰问题
Write2_Code();
k=0x13;
data3=0x13; //起始列选择,ADC=1,起始列从19列开始
Write1_Code();
for(i=0;i<3;i++) /*3个汉字,将汉字写在左屏*/
{
data3=0x0; //列设置,解决抗干扰问题
Write2_Code();
data3=k;
Write1_Code();
for(j=0;j<8;j++) /*写汉字左上部分*/
{
data1=ch2[i][j];
Write1_Data();
k++;
}
for(j=0;j<8;j++) /*写汉字右上部分*/
{
data1=ch2[i][j+8];
Write1_Data();
k++;
}
}
data3=0x0Ba; //页设置,换页写时需注意调整列来书写
Write1_Code();
data3=0x0B8; //页设置,解决抗干扰问题
Write2_Code();
data3=0x0; //列设置,解决抗干扰问题
Write2_Code();
k=0x13;
data3=0x13; //起始列选择,ADC=1,起始列从19列开始
Write1_Code();
for(i=0;i<3;i++)
{
data3=0x0; //列设置,解决抗干扰问题
Write2_Code();
data3=k;
Write1_Code();
for(j=0;j<8;j++) /*写汉字左下部分*/
{
data1=ch2[i][j+16];
Write1_Data();
k++;
}
for(j=0;j<8;j++) /*写汉字右下部分*/
{
data1=ch2[i][j+24];
Write1_Data();
k++;
}
}
Lcd_Delay();
}
void Judge1_Ready()
{
do
{
asm(" IN 4000h,_temp1 ");
asm(" IN 2000h,_temp2 ");
temp1=temp1|0x080;
temp2=temp2|0x080;
temp1=temp1>>7;
temp2=temp2>>7;
}while((temp1!=0)&&(temp2!=0));
}
void Write1_Code()
{
//Judge1_Ready();
Lcd_Delay();
//PEDATDIR=PEDATDIR | 0x4000;修改
//PEDATDIR=PEDATDIR & 0xFFBF;修改
PEDATDIR=PEDATDIR | 0x2000;
PEDATDIR=PEDATDIR & 0xFFDF;//Code
asm(" ldp #010h ");
asm(" OUT 061h,4000h "); //4000h,E1
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
}
void Write2_Code()
{
//Judge1_Ready();
Lcd_Delay();
//PEDATDIR=PEDATDIR | 0x4000;修改
//PEDATDIR=PEDATDIR & 0xFFBF;修改
PEDATDIR=PEDATDIR | 0x2000;
PEDATDIR=PEDATDIR & 0xFFDF;//Code
asm(" ldp #010h ");
asm(" OUT 061h,2000h "); //2000h,E2
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
}
void Write1_Data()
{
//Judge1_Ready();
Lcd_Delay();
PEDATDIR=PEDATDIR | 0x2020;
asm(" ldp #010h ");
//while(1)
asm(" OUT 060h,4000h ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
}
void Write2_Data()
{
//Judge1_Ready();
Lcd_Delay();
PEDATDIR=PEDATDIR | 0x2020;
asm(" ldp #010h ");
asm(" OUT 060h,2000h ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
}
void KickDog() /*踢除看门狗 */
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?