?? main.c
字號:
/*Main.c*/
/*t6963液晶測試程序,數據端口8000H,代碼端口8001H*/
#include "global.c"
void SystemInit();
void KickDog();
void ShowChar(unsigned char,unsigned char,unsigned char);
void ShowHZ(unsigned char,unsigned char,unsigned int);
void Init_Lcd(void);
void Clr_Lcd(void);
void Creat_CGRAM(unsigned char);
void Judge1_Ready(void);
void Judge2_Ready(void);
void Write_Code(void);
void Write1_Data(void);
void Write2_Data(void);
void Lcd_Delay(void);
void Lcd_Delay1(void);
unsigned int temp1,temp2;
unsigned long code_addr,data_addr;
unsigned int LineChar=16;
unsigned int ColumnChar=8;
unsigned int ch1[3][16]={{0x00,0x00,00,00,00,0,00,00,00,00,00,00,00,00,00,00},
{0x11,0x0e,0x37,0x45,0x4c,0x43,0x4f,0x4d,0x45,0x00,0x39,0x4f,0x55,0x3e,0x3e,0x01}, /*;21H!*/
{00,00,00,0x14,0x28,0x50,00,00,00,00,00,00,00,00,00,00}};
unsigned int ch2[][8]={{0x00,0x00,0xFC,0x05,0x85,0x4A,0x28,0x10}, /*歡*/
{0x18,0x18,0x24,0x24,0x41,0x86,0x38,0x00},
{0x80,0x80,0x80,0xFE,0x04,0x48,0x40,0x40},
{0x40,0x60,0xA0,0x90,0x18,0x0E,0x04,0x00},
{0x40,0x21,0x36,0x24,0x04,0x04,0xE4,0x24}, /*迎*/
{0x25,0x26,0x24,0x20,0x20,0x50,0x8F,0x00},
{0x00,0x80,0x7C,0x44,0x44,0x44,0x44,0x44},
{0x44,0x54,0x48,0x40,0x40,0x00,0xFE,0x00},
{0x09,0x09,0x11,0x13,0x22,0x34,0x68,0xA2}, /*你*/
{0x23,0x22,0x24,0x24,0x28,0x21,0x20,0x00},
{0x00,0x80,0x04,0xFE,0x04,0x48,0x40,0x50},
{0x48,0x48,0x44,0x46,0x44,0x40,0x80,0x00},
{0x40,0x20,0x27,0x09,0x89,0x52,0x52,0x16},/*液*/
{0x2B,0x22,0xE2,0x22,0x22,0x22,0x23,0x22},
{0x40,0x20,0xFE,0x20,0x20,0x7C,0x44,0xA8},
{0x98,0x50,0x20,0x30,0x50,0x88,0x0E,0x04},
{0x00,0x0F,0x08,0x0F,0x08,0x0F,0x08,0x00},/*晶*/
{0x7E,0x42,0x7E,0x42,0x42,0x7E,0x42,0x00},
{0x00,0xF0,0x10,0xF0,0x10,0xF0,0x10,0x00},
{0x7E,0x42,0x7E,0x42,0x42,0x7E,0x42,0x00},
{0x01,0x00,0x3F,0x20,0x22,0x21,0x30,0x28},/*應*/
{0x24,0x24,0x26,0x44,0x40,0x5F,0x80,0x00},
{0x00,0x80,0xFC,0x00,0x00,0x08,0x8C,0xC8},
{0x90,0x90,0x20,0x20,0x40,0xFE,0x00,0x00},
{0x00,0x1F,0x10,0x10,0x10,0x1F,0x10,0x10},/*用*/
{0x10,0x1F,0x10,0x10,0x20,0x20,0x40,0x80},
{0x00,0xFC,0x84,0x84,0x84,0xFC,0x84,0x84},
{0x84,0xFC,0x84,0x84,0x84,0x84,0x94,0x88}};/*歡迎你液晶應用*/
main()
{
SystemInit(); //系統初始化
MCRA=MCRA & 0xC0FF; //IOPB0-6設為IO口模式
PBDATDIR=0xFFC2; //所有LED=0
PBDATDIR=PBDATDIR |0x003D; //所有LED=1
code_addr=0x8010;
data_addr=0x8000;
MCRC=MCRC & 0xFFF0;
PEDATDIR=PEDATDIR | 0x0200;
PEDATDIR=PEDATDIR & 0xFFFD;
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
PEDATDIR=PEDATDIR | 0x0202;
Init_Lcd();
ShowChar(0,0,1);
Creat_CGRAM(28);
ShowHZ(4,0,0x80);
ShowHZ(4,2,0x84);
ShowHZ(4,4,0x88);
ShowHZ(4,8,0x8c);
ShowHZ(4,10,0x90);
ShowHZ(4,12,0x94);
ShowHZ(4,14,0x98);
while(1)
{
// asm(" IN 8010h,_temp2 ");
// asm(" OUT 061h,8000h ");
/* asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");
asm(" OUT 061h,8000h ");*/
};
}
void SystemInit()
{
asm(" SETC INTM "); /* 關閉總中斷 */
asm(" CLRC SXM "); /* 禁止符號位擴展 */
asm(" CLRC CNF "); /* B0塊映射為 on-chip DARAM*/
asm(" CLRC OVM "); /* 累加器結果正常溢出*/
SCSR1=0x8FFE; /* 系統時鐘CLKOUT=20*0.5=10M */
/* 打開ADC,EVA,EVB,CAN和SCI的時鐘,系統時鐘CLKOUT=10M */
WDCR=0x006F; /* 禁止看門狗,看門狗時鐘64分頻 */
KickDog(); /* 初始化看門狗 */
IFR=0xFFFF; /* 清除中斷標志 */
IMR=0x0000; /* 關閉中斷*/
}
void ShowChar(unsigned char lin,unsigned char column,unsigned char k)
{
unsigned char i;
unsigned int StartAddr;
StartAddr=lin*LineChar +column; //定位起始行
for(i=0;i<16;i++)
{
data1=(unsigned char)(StartAddr);
data2=(unsigned char)(StartAddr>>8);
data3=0x24;
Write1_Data();
Write2_Data();
Write_Code();
data1=ch1[k][i];
Write1_Data();
data3=0xc4;
Write_Code();
StartAddr=StartAddr + 1;
}
}
void Creat_CGRAM(unsigned char count)
{
unsigned int i,j;
data1=0x03; //CGRAM偏置地址設置
data2=0x00;
data3=0x22;
Write1_Data();
Write2_Data();
Write_Code();
data1=0x00; //RAM地址指針設置
data2=0x1c;
data3=0x24;
Write1_Data();
Write2_Data();
Write_Code();
data3=0x0b0;
Write_Code(); //為自動寫入狀態
data1=count*8; //漢字字節數
for(i=0;i<count;i++)
{
for(j=0;j<8;j++)
{
Lcd_Delay();
data2=ch2[i][j];
Write2_Data();
}
}
data3=0x0b2;
Write_Code();
Lcd_Delay1();
}
void ShowHZ(unsigned char lin,unsigned char column,unsigned int code)
{
unsigned char i;
unsigned int StartAddr1;
unsigned int temp;
temp=code;
StartAddr1=lin*LineChar +column; //定位起始行
for(i=0;i<4;i++)
{
data1=(unsigned char)(StartAddr1);
data2=(unsigned char)(StartAddr1>>8);
data3=0x24;
Write1_Data();
Write2_Data();
Write_Code();
data1=temp;
Write1_Data();
data3=0xc4;
Write_Code();
if(i==0)
{
temp=temp+2;
StartAddr1=StartAddr1 + 1;
}
if(i==1)
{
temp=temp-1;
StartAddr1=StartAddr1 + 15;
}
if(i==2)
{
temp=temp+2;
StartAddr1=StartAddr1 + 1;
}
}
}
void Init_Lcd()
{
data1=0x00; //圖形區首址 (0000H)
data2=0x08;
data3=0x42;
Write1_Data();
Write2_Data();
Write_Code();
data1=0x10; //圖形區寬度
data2=0x00;
data3=0x43;
Write1_Data();
Write2_Data();
Write_Code();
data1=0x00; //文本區首址(1000h)
data2=0x00;
data3=0x40;
Write1_Data();
Write2_Data();
Write_Code();
data1=0x10; //文本區寬度
data2=0x00;
data3=0x41;
Write1_Data();
Write2_Data();
Write_Code();
data3=0xa7; //設置光標的形狀
Write_Code();
data1=0x0f; //光標指針,data1為列(00-0f),data2(00-07)為行,8*8框格
data2=0x07;
data3=0x21;
Write1_Data();
Write2_Data();
Write_Code();
data3=0x9f;
Write_Code(); //啟用圖形和文本顯示,光標閃爍
data3=0x81;
Write_Code(); //字符發生器為CGRAM,顯示方式為邏輯或
data1=0x00; //置地址指針位置,(*)
data2=0x00;
data3=0x24;
Write1_Data();
Write2_Data();
Write_Code();
Clr_Lcd();
return;
}
void Clr_Lcd()
{
unsigned int p=0,q=0,r=0;
/*data1=0x03; //CGRAM偏置地址設置
data2=0x00;
data3=0x22;
Write1_Data();
Write2_Data();
Write_Code();*/
data2=0x00;
data3=0x0b0;
Write_Code(); //為自動寫入狀態
data1=0x2000; //清顯示RAM 0000H-2000H(8K)
while(data1-->0)
{
//Judge2_Ready();
Lcd_Delay1();
data2=0x00;
Write2_Data();
}
data1=0x00; //置地址指針位置,(*)
data2=0x00;
data3=0x24;
Write1_Data();
Write2_Data();
Write_Code();
data1=0x2000; //寫顯示RAM 0000H-2000H(8K)
while(data1-->0)
{
Lcd_Delay1();
data2=0x0aa;
Write2_Data();
}
data1=0x00; //置地址指針位置,(*)
data2=0x00;
data3=0x24;
Write1_Data();
Write2_Data();
Write_Code();
data1=0x2000; //清顯示RAM 0000H-2000H(8K)
while(data1-->0)
{
Lcd_Delay1();
data2=0x0;
Write2_Data();
}
data3=0x0b2;
Write_Code();
return;
}
void Lcd_Delay()
{
unsigned int i=1;
unsigned int j=1;
while(i--)
{
while(j--){;}
}
}
void Lcd_Delay1()
{
unsigned int i=1;
unsigned int j=25;
while(i--)
{
while(j--){;}
}
}
void Judge1_Ready()
{
do
{
asm(" IN 8010h,_temp1 ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
temp1=temp1&3;
}while(temp1!=3);
temp1=0;
}
void Judge2_Ready()
{
do
{
asm(" IN 8010h,_temp2 ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
temp2=temp2&8;
}while(temp2!=8);
temp2=0;
}
void Write_Code()
{
//Judge1_Ready();
Lcd_Delay();
PEDATDIR=PEDATDIR | 0x2020;
asm(" ldp #010h ");
asm(" OUT 062h,8010h ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
//Lcd_Delay();
return;
}
void Write1_Data()
{
Lcd_Delay();
PEDATDIR=PEDATDIR | 0x2000;
PEDATDIR=PEDATDIR & 0xFFDF;
//Judge1_Ready();
asm(" ldp #010h ");
asm(" OUT 060h,8000h ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
//Lcd_Delay();
return;
}
void Write2_Data()
{
Lcd_Delay();
PEDATDIR=PEDATDIR | 0x2000;
PEDATDIR=PEDATDIR & 0xFFDF;
//Judge1_Ready();
asm(" ldp #010h ");
asm(" OUT 061h,8000h ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" nop ");
//Lcd_Delay();
return;
}
void KickDog() /*踢除看門狗 */
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -