|
#include "12864.h"
//uchar key;
//*************************************************************************
//放到主函數(shù)里初始化,在Display(); 里寫入12864畫面上不動(dòng)的漢字或字符
//1.顯示字符或漢字調(diào)用這個(gè)函數(shù) DisplayCgrom(uchar addr,uchar *hz);
//舉例 DisplayCgrom(0x81,"工頻參數(shù)測(cè)量");
// DisplayCgrom(0x90,"U=");
//2.顯示數(shù)字調(diào)用這些函數(shù),特殊的沒有再自己添加
//Dispaly_three_point1_number(uchar addr,uint num_display); // 1.25格式
//Dispaly_four_point1_number(uchar addr,uint num_display); // 2.345格式
//Dispaly_three_point2_number(uchar addr,uint num_display); // 32.5格式
//Dispaly_four_point2_number(uchar addr,uint num_display); // 17.56格式
//Dispaly_four_point3_number(uchar addr,uint num_display); // 234.5格式
//Dispaly_six_point2_number(uchar addr,uint num_display);
//Display_two_number(uchar addr,uint num_display); // 435
//Display_three_number(uchar addr,uint num_display); // 435
//Display_four_number(uchar addr,uint num_display); // 4356
//Display_five_number(uchar addr,uint num_display); // 7445
//舉例 Dispaly_four_point1_number(0x8a,result[0]);
/*************************************************************************
LCD_init(); //液晶參數(shù)初始化設(shè)置
LCD_clear(); //清屏
Display(); //默認(rèn)不動(dòng)的參數(shù)顯示
**************************************************************************/
uchar num[]={"0123456789 :.-"};
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port_init()
{
P5DIR = 0xFF;
P3DIR|= BIT0 + BIT1 + BIT2;
}
/*------------------檢查忙位-----------------------------*/
void chk_busy()
{ RS_CLR;
RW_SET;
EN_SET;
P5DIR=0x00;
while(P5IN&0x80);
EN_CLR;
P5DIR=0xff;
}
//***********************************************************************
// 顯示屏命令寫入函數(shù)
//***********************************************************************
void LCD_write_com(unsigned char com)
{ chk_busy();
RS_CLR;
RW_CLR;
EN_SET;
DataPort = com;
EN_CLR;
}
//***********************************************************************
// 顯示屏數(shù)據(jù)寫入函數(shù)
//***********************************************************************
void LCD_write_data(unsigned char data)
{ chk_busy();
RS_SET;
RW_CLR;
EN_SET;
DataPort = data;
EN_CLR;
}
//***********************************************************************
// 顯示屏清空顯示
//***********************************************************************
void LCD_clear(void)
{
LCD_write_com(0x01);
}
void Dispaly_three_point1_number(uchar addr,uint num_display) // 1.25格式
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[12]); //"."
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[num_display%10]);
}
void Dispaly_four_point1_number(uchar addr,uint num_display) // 2.345格式
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/1000%10]);
LCD_write_data(num[12]); //"."
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[num_display%10]);
}
void Dispaly_three_point2_number(uchar addr,uint num_display) // 32.5格式
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[12]); //"."
LCD_write_data(num[num_display%10]);
}
void Dispaly_four_point2_number(uchar addr,uint num_display) // 17.56格式
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/1000%10]);
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[12]); //"."
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[num_display%10]);
}
void Dispaly_four_point3_number(uchar addr,uint num_display) // 234.5格式
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/1000%10]);
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[12]); //"."
LCD_write_data(num[num_display%10]);
}
void Dispaly_six_point2_number(uchar addr,ulong num_display) // 234.5格式
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/100000%10]);
LCD_write_data(num[num_display/10000%10]);
LCD_write_data(num[12]); //"."
LCD_write_data(num[num_display/1000%10]);
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[num_display%10]);
}
void Display_two_number(uchar addr,uint num_display)
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[num_display%10]);
}
void Display_three_number(uchar addr,uint num_display)
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[num_display%10]);
}
void Display_four_number(uchar addr,uint num_display)
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/1000%10]);
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[num_display%10]);
}
void Display_five_number(uchar addr,uint num_display)
{
LCD_write_com(addr); //顯示位置
LCD_write_data(num[num_display/10000%10]);
LCD_write_data(num[num_display/1000%10]);
LCD_write_data(num[num_display/100%10]);
LCD_write_data(num[num_display/10%10]);
LCD_write_data(num[num_display%10]);
}
//***********************************************************************
//函數(shù)名稱:DisplayCgrom(uchar hz)顯示CGROM里的漢字
//***********************************************************************
void DisplayCgrom(uchar addr,uchar *hz)
{
LCD_write_com(addr);
while(*hz != '\0')
{
LCD_write_data(*hz);
hz++;
}
}
//****************************************************************
//函數(shù)名稱:Display()顯示測(cè)試結(jié)果
//****************************************************************
void Display(void)
{
DisplayCgrom(0x81,"生產(chǎn)環(huán)境監(jiān)測(cè)");
DisplayCgrom(0x90,"溫濕度實(shí)時(shí)顯示");
}
//***********************************************************************
// 顯示屏初始化函數(shù)
//***********************************************************************
void LCD_init(void)
{
Port_init();
LCD_write_com(FUN_MODE); //顯示模式設(shè)置
LCD_write_com(FUN_MODE); //顯示模式設(shè)置
LCD_write_com(DISPLAY_ON); //顯示開
LCD_write_com(CLEAR_SCREEN); //清屏
LCD_write_com(CURSE_ADD);
}
//***********************************************************************
//以下是繪圖功能函數(shù)的定義
//***********************************************************************
//***********************************************************************
//清整個(gè)GDRAM空間
//***********************************************************************
void clrgdram()
{
unsigned char x,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{ LCD_write_com(0x34);
LCD_write_com(y+0x80); //行地址
LCD_write_com(x+0x80); //列地址
LCD_write_com(0x30);
LCD_write_data(0x00);
LCD_write_data(0x00);
}
}
//***********************************************************************
//讀GDRAM一個(gè)字節(jié)信息
//***********************************************************************
uchar LCD_ReadByte(void)
{
uchar value;
chk_busy();
RS_SET;
RW_SET;
EN_CLR;
EN_SET;
P5DIR=0x00;
value=P5IN;
EN_CLR;
P5DIR=0xff;
return value;
}
//***********************************************************************
//畫點(diǎn)函數(shù)mode=0,清除點(diǎn);mode=1,點(diǎn)亮指定點(diǎn);mode=2,當(dāng)前點(diǎn)的狀態(tài)取反;
//***********************************************************************
void Draw_point(uchar x,uchar y,uchar mode)
{
uchar ReadOldH,ReadOldL;
LCD_write_com(0x34); //擴(kuò)充指令集
LCD_write_com(0x36); //繪圖顯示開
LCD_write_com(y-(y/32)*32+0x80); //列地址
LCD_write_com(x/16+(y/32)*8+0x80); //行地址
LCD_ReadByte();
ReadOldH=LCD_ReadByte();
ReadOldL=LCD_ReadByte();
LCD_write_com(y-(y/32)*32+0x80); //列地址
LCD_write_com(x/16+(y/32)*8+0x80); //行地址
switch(x%16/8%2)
{
case 0:
switch(mode)
{
case 0: ReadOldH&=~(0x80>>(x%16%8));break;
case 1: ReadOldH|=0x80>>(x%16%8);break;
case 2: ReadOldH^=0x80>>(x%16%8);break;
}
LCD_write_data(ReadOldH);
LCD_write_data(ReadOldL);
break;
case 1:
switch(mode)
{
case 0: ReadOldL&=~(0x80>>(x%16%8));break;
case 1: ReadOldL|=0x80>>(x%16%8);break;
case 2: ReadOldL^=0x80>>(x%16%8);break;
}
LCD_write_data(ReadOldH);
LCD_write_data(ReadOldL);
break;
}
LCD_write_com(0x30);
}
/*
void point(uchar X,uchar Y,uchar Color)
{
uchar Tier,Tier_bit;
uchar ReadOldH,ReadOldL;
uchar Row;
LCD_write_com(0x34);
LCD_write_com(0x36);
Tier=X>>4; //Tier/=16;
Tier_bit=X&0x0f; //Tier%=16;
if(Y<32)
Row=Y;
else
{
Row=Y-32;
Tier+=8;
}
LCD_write_com(Row+0x80); //行地址
LCD_write_com(Tier+0x80); //列地址
LCD_ReadByte();
ReadOldH=LCD_ReadByte();
ReadOldL=LCD_ReadByte();
LCD_write_com(Row+0x80);
LCD_write_com(Tier+0x80);
if(Tier_bit<8)
{
switch(Color)
{
case 0:ReadOldH&=(~(0x01<<(7-Tier_bit)));break;
case 1:ReadOldH|=(0x01<<(7-Tier_bit));break;
case 2:ReadOldH^=(0x01<<(7-Tier_bit));break;
default:break;
}
LCD_write_data(ReadOldH);
LCD_write_data(ReadOldL);
}
else
{
switch(Color)
{
case 0:ReadOldL&=(~(0x01<<(15-Tier_bit)));break;
case 1:ReadOldL|=(0x01<<(15-Tier_bit));break;
case 2:ReadOldL^=(0x01<<(15-Tier_bit));break;
default:break;
}
LCD_write_data(ReadOldH);
LCD_write_data(ReadOldL);
}
LCD_write_com(0x30);
}
*/
//***********************************************************************
//顯示正弦函數(shù)圖像
//***********************************************************************
void Display_sin_function(float T,uchar A)
{
float x,y;
uchar x1,y1;
float k;
k=2*10/T;
for(x=0;x<127;x+=1)
{
delay_ms(50);
y=sin(0.314*x*k);
x1=(uchar)(x);
y1=(uchar)(31-(A*y+0.5));
Draw_point(x1,y1,1);
}
}
void Display_coordinate(uchar x,uchar y) //set coordinate origin
{
uchar i,j;
for(j=0;j<64;j++)
Draw_point(x,j,1);
for(i=0;i<128;i++)
{ Draw_point(i,y,1);}
}
|
|