?? main.c
字號:
/*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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -