注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

瘋人院

lunatic asylum

 
 
 

日志

 
 

12232显示屏程序  

2010-10-19 01:46:15|  分类: 編程語言 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
/*=============================================================================
功能:使用12232液晶显示测试程序
=============================================================================== 
连接线图: 
-------------------------------------------------------------------------------
| RW-------P3.6 | A0--------P3.7 | CLK-------P3.4 |
| E1-------P4.2 | E2--------P4.3 | DATA------P3.5 |
| RS-------P1.2 |
-------------------------------------------------------------------------------
液晶显示规则:
M(左)  S(右)
pageL pageR
 2 | 2
 3 | 3
 0 | 0
 1 | 1
-------------------------------------------------------------------------------
采用晶振:22.118HMz
==============================================================================*/
#include <AT89X52.H>
#include <intrins.h>
//#include "LCD12232.h"

#define uchar unsigned char
#define uint unsigned int

#define E1 P4_2 //块1  左边
#define E2 P4_3 //块2  右边
#define RW P3_6 //读写控制
#define A0 P3_7 //A0为1时是数据,0时为指令数据
#define DATA P3_5 //74HC164数据
#define CLK P3_4 //74HC164时钟
//#define RS P1_2   //LCD复位

uchar buf; //缓存区

extern uchar code Chinese[];//中文1-5,请,选,举
/***********************************************图片及文字库***************************************************************/
/**字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/488字节/
/*
extern uchar code Bmp0[];  //动态“等待”
extern uchar code Bmp1[];
extern uchar code Bmp2[];
extern uchar code Bmp3[];
extern uchar code Bmp4[];
extern uchar code Bmp5[];
extern uchar code Bmp6[];
extern uchar code Bmp7[];
extern uchar code Bmp8[];
*/
extern uchar code tab013[];
extern uchar code tab012[];
extern uchar code tab011[];
extern uchar code tab010[];
extern uchar code tab09[];
extern uchar code tab08[];
extern uchar code tab07[];
extern uchar code tab06[];
extern uchar code tab05[];
extern uchar code tab04[];
extern uchar code tab03[];
extern uchar code tab02[];
extern uchar code tab01[];
extern uchar code pricked[];

/*********************************************************功能:延时*************************************************************/
/*
void delayNms(uchar t)
{
uchar i;
for(t;t>0;t--)
for(i=0;i<125;i++);
}
*/
void delay(uint i)
{
uchar k=200;
while(i>0)
{
i--;
}
while(k>1)k--;
}
void delay1s(uchar i)
{
while(i>1)
{
i--;
delay(65530);
}
}

/*************************************************功能:左页---发送数******************************************************/
void OUTMD(uchar i)
{
uchar c;
A0=1; //写数据
_nop_();

E1=1;
_nop_();

buf=i;
for(c=0;c<8;c++)
{
CLK=0;
_nop_();
DATA=buf&0x80;
_nop_();
CLK=1;
_nop_();
buf<<=1;
}
_nop_();
E1=0;
_nop_();
}

/******************************************功能:左页---发送命**************************************************************/
void OUTMI(uchar i)
{
uchar c;
A0=0; //写指令
_nop_();

E1=1;
_nop_();

buf=i;
for(c=0;c<8;c++)
{
CLK=0;
_nop_();
DATA=buf&0x80;
_nop_();
CLK=1;
_nop_();
buf<<=1;
}
_nop_();
E1=0;
_nop_();
}

/***********************************************功能:右页---发送数据******************************************************/
void OUTSD(uchar i)
{
uchar c;
A0=1; //写数据
_nop_();

E2=1;
_nop_();

buf=i;
for(c=0;c<8;c++)
{
CLK=0;
_nop_();
DATA=buf&0x80;
_nop_();
CLK=1;
_nop_();
buf<<=1;
}
_nop_();
E2=0;
_nop_();
}


/***************************************************功能:右页---发送命令***************************************************/
void OUTSI(uchar i)
{
uchar c;
A0=0; //写指令
_nop_();
E2=1;
_nop_();

buf=i;
for(c=0;c<8;c++)
{
CLK=0;
_nop_();
DATA=buf&0x80;
_nop_();
CLK=1;
_nop_();
buf<<=1;
}
_nop_();
E2=0;
_nop_();
}



/******************************************功能:初始化LCD寄存器*******************************************************/
void LCD_init(void)
{
RW=0;
OUTMI(0XE2);
OUTSI(0XE2);//复位
OUTMI(0X56);
OUTSI(0X56);//省电模式选择 0x55/0x56
OUTMI(0XA4);
OUTSI(0XA4);//动态驱动
OUTMI(0XA9);
OUTSI(0XA9);//1/32(0xA9)占空比,当为1/16(0XA8)时会两行显示
OUTMI(0XA0);
OUTSI(0XA0);//时钟线输出
OUTMI(0XEE);
OUTSI(0XEE);//写模式
OUTMI(0X00);
OUTSI(0X00);//设置列地址
OUTMI(0XC0);
OUTSI(0XC0);//设置起始页地址
OUTMI(0XAF);
OUTSI(0XAF);//显示打开
}
/*******************************功能:同时设置主从显示页为0-3页。(内函数)***********************************/
void SetPage(uchar page0,uchar page1)
{
OUTMI(0xB8|page1);  //0xB8起始页地址
OUTSI(0xB8|page0);
}

/*******************************功能:同时设置主从列地址为0-121。(内函数)**************************************/
void SetAddress(uchar address0,uchar address1)
{
OUTMI(address1);
OUTSI(address0);
}

/********************************功能:在右页当前地址画一个字节8个点。(内函数)************************************/
void PutCharR(uchar ch)
{
OUTSD(ch);
}

/********************************功能:在左页当前地址画一个字节8个点。(内函数)**************************************/
void PutCharL(uchar ch)
{
OUTMD(ch);

/*******************************功能:清屏。参数说明:为0清全屏;为1清第一行;为2清第二行。**********************/
void clrscr(uchar page1)
{
uchar i;
uchar page;
if(page1==1)
{
page=0;
for(page;page<2;page++)
{
SetPage(page,page);
SetAddress(0,0);
for(i=0;i<61;i++)
{
PutCharR(0);
PutCharL(0);
}
}
}
if(page1==2)
{
page=2;
for(page;page<4;page++)
{
SetPage(page,page);
SetAddress(0,0);
for(i=0;i<61;i++)
{
PutCharR(0);
PutCharL(0);
}
}
}
else
{
page=0;
for(page;page<4;page++)
{
SetPage(page,page);
SetAddress(0,0);
for(i=0;i<61;i++)
{
PutCharR(0);
PutCharL(0);
}
}
}
/****************************************************************************************
功能:图片显示
参数说明: x_add:显示的首地址;
width:显示的宽带;
layer:选择显示行数(为0表示全屏,为1表示为第一行,为2表示为第二行);
bmp:显示的图片;
//putcharR //右边
//putcharL //左边
****************************************************************************************/
void DrawBmp(uint x_add, uchar width,uchar layer,uchar *bmp)
{
uchar x,address,i=0;    //address表示显存的物理地址
uchar page=0; //page表示上下两页
bit window=0;   //window表示左右两页

for (x=width;x>1;x--)  
{
if (x_add>60) //地址划分
{
window=1;
address=x_add%61;
}
else 
address=x_add;
if(layer==0)
{
SetPage(0,0);
SetAddress(address,address);
if(window==1)
PutCharL(bmp[i]);
else
PutCharR(bmp[i]);
SetPage(1,1);
SetAddress(address,address);
if(window==1)
PutCharL(bmp[i+width]);
else
PutCharR(bmp[i+width]);
SetPage(2,2);
SetAddress(address,address);
if(window==1)
PutCharL(bmp[i]);
else
PutCharR(bmp[i]);
SetPage(3,3);
SetAddress(address,address);
if(window==1)
PutCharL(bmp[i+width]);
else
PutCharR(bmp[i+width]);
i++;
x_add++;
}
if(layer==1)
{
SetPage(2,2);
SetAddress(address,address);
if(window==1)
PutCharL(bmp[i+width+width]);
else
PutCharR(bmp[i+width+width]);
SetPage(3,3);
SetAddress(address,address);
if(window==1)
PutCharL(bmp[i+width+width+width]);
else
PutCharR(bmp[i+width+width+width]);
i++;
x_add++;
}
else
{
SetPage(0,0);
SetAddress(address,address);
if(window==1)
PutCharL(bmp[i+width+width]);
else
PutCharR(bmp[i+width+width]);
SetPage(1,1);
SetAddress(address,address);
if(window==1)
PutCharL(bmp[i+width+width+width]);
else
PutCharR(bmp[i+width+width+width]);
i++;
x_add++;
}
address=0;
x_add=0;
bmp=0;
}
/****************************************************************************************
功能:显示汉字及字符显示
参数说明: x_add横坐标位置;
layer显示的第几行汉字,;
x_add横坐标位置;
layer显示的层;
 width显示的宽度:width显示的宽度(列)当调用数组pricked时0_where表示的数值表示:0为竖,1为空格,2为冒号,3为逗号;调用其他数组时表示第几个汉字。
****************************************************************************************/
void Draw_word(uchar d_where,uint x_add,uchar layer,uchar width,uchar *tab)
{
uchar x,i=0,address;    //address表示显存的物理地址
uchar page=0; //page表示上下两页
bit window=0;   //window表示左右两页
//putcharR //右边
//putcharL //左边
if(width==16)
d_where=d_where*32; //计算机每个汉字编码的首地址
   else
// if(width==8)
d_where=d_where*16;
// else
// d_where=d_where*8;
for (x=width;x>1;x--)
{
if(x_add>60) //地址划分
{
window=1;
address=x_add%61;
}
else 
address=x_add;
if(layer==0) //显示一行
{
SetPage(2,2);
SetAddress(address,address);
if(window==1)
PutCharL(tab[d_where]);//左边
else
PutCharR(tab[d_where]);//右边
SetPage(3,3);
SetAddress(address,address);
if(window==1)
PutCharL(tab[d_where+width]);
else
PutCharR(tab[d_where+width]);
}
else
{ //显示第二行
SetPage(0,0);
SetAddress(address,address);
if(window==1)
PutCharL(tab[d_where]); //左边
else
// PutCharR(tab[d_where+1]);
PutCharR(tab[d_where]); //右边

SetPage(1,1);
SetAddress(address,address);
if(window==1)
PutCharL(tab[d_where+width]);
else
// PutCharR(tab[d_where+width+1]);
PutCharR(tab[d_where+width]);
}
x_add++;
d_where++;
}
address=0;
x_add=0;

/********************************************功能:显示动态的等待图标***************************************************/
/*
void wait(uchar i)
{
for(;i>1;i--)
{
delay1s(2);
clrscr(); 
DrawBmp(0,60,0,Bmp8); 
DrawBmp(76,19,0,Bmp1); 
delay1s(2);
clrscr(); 
DrawBmp(0,60,0,Bmp8); 
DrawBmp(76,19,0,Bmp2); 
delay1s(2);
clrscr(); 
DrawBmp(0,60,0,Bmpt8); 
DrawBmp(76,19,0,Bmp3);
delay1s(2);
clrscr();
DrawBmp(0,60,0,Bmp8);
DrawBmp(76,19,0,Bmp4);
delay1s(2);
clrscr();
DrawBmp(0,60,0,Bmp8);
DrawBmp(76,19,0,Bmp5);
delay1s(2);
clrscr();
DrawBmp(0,60,0,Bmp8);
DrawBmp(76,19,0,Bmp6);
delay1s(2);
clrscr();
DrawBmp(0,60,0,Bmp8);
DrawBmp(76,19,0,Bmp7); 
}
}
*/
/***********************************************功能:显示投票统计界面***************************************************/
void toupiao()
{
//显示格式:“ ---| --- |--- ”
Draw_word(1,0,1,8,pricked);
Draw_word(1,8,1,8,tab01); 
Draw_word(5,16,1,8,tab01); 
Draw_word(9,24,1,8,tab01);
Draw_word(0,32,1,8,pricked);
Draw_word(1,40,1,8,pricked);  
Draw_word(1,48,1,8,tab01); 
Draw_word(4,56,1,8,tab01); 
Draw_word(3,64,1,8,tab01);
Draw_word(1,72,1,8,pricked);
Draw_word(0,80,1,8,pricked);
Draw_word(1,88,1,8,tab01);
Draw_word(5,96,1,8,tab01);
Draw_word(5,104,1,8,tab01); 
Draw_word(1,112,1,8,pricked);

DrawBmp(0,122,1,tab05);

delay1s(10);

clrscr(0);
}

/********************************************功能:显示投票提示界面******************************************************/
void toupiao_tips(uchar layer)
{
if(layer==0)
{
// delay1s(10);
DrawBmp(0,122,1,tab07);
DrawBmp(0,122,2,tab06);
delay1s(10);
clrscr(0);
}
if(layer==1)
{
DrawBmp(0,122,1,tab06);
// delay1s(2);
DrawBmp(0,122,2,tab06);
delay1s(10);
clrscr(0);
}
if(layer==2)
{
DrawBmp(0,122,1,tab08);
// delay1s(1);
DrawBmp(0,122,2,tab06);
delay1s(10);
clrscr(0);
}
if(layer==3)
{
DrawBmp(0,122,1,tab04);
// delay1s(2);
DrawBmp(0,122,2,tab06);
delay1s(20);
clrscr(0);
}
 }
/**********************************************功能:显示选举提示界面***************************************************/
void Election_tips()
{

// Draw_word(5,0,0,16,Chinese);
// Draw_word(6,16,0,16,Chinese);
// Draw_word(7,32,0,16,Chinese);
// Draw_word(2,48,0,8,pricked);

//显示格式:“ 一|二|三|四|五”
/* Draw_word(1,0,1,8,pricked);
Draw_word(0,8,1,16,Chinese);
Draw_word(0,24,1,8,pricked);
Draw_word(1,32,1,16,Chinese);
Draw_word(0,48,1,8,pricked);
Draw_word(2,56,1,16,Chinese);
Draw_word(0,72,1,8,pricked);
Draw_word(3,80,1,16,Chinese);
Draw_word(0,96,1,8,pricked);
Draw_word(4,104,1,16,Chinese);
*/
Draw_word(1,0,1,8,pricked);
Draw_word(1,8,1,8,tab01);
Draw_word(5,16,1,8,tab01);
Draw_word(0,24,1,8,pricked);
Draw_word(9,32,1,8,tab01);
Draw_word(1,40,1,8,tab01);
Draw_word(0,48,1,8,pricked);
Draw_word(4,56,1,8,tab01);
Draw_word(3,64,1,8,tab01);
Draw_word(0,72,1,8,pricked);
Draw_word(5,80,1,8,tab01);
Draw_word(5,88,1,8,tab01);
Draw_word(0,96,1,8,pricked);
Draw_word(8,104,1,8,tab01);
Draw_word(7,112,1,8,tab01); 

DrawBmp(0,122,1,tab010);

delay1s(10);
clrscr(0);
}
/***************************************************功能:显示选举统计界面********************************************/
void Election()
{
/*
Draw_word(1,0,0,8,pricked);
Draw_word(1,8,0,8,tab01); 
Draw_word(5,16,0,8,tab01); 
Draw_word(0,24,0,8,pricked);
Draw_word(9,32,0,8,tab01);  
Draw_word(1,40,0,8,tab01);
Draw_word(0,48,0,8,pricked); 
Draw_word(4,56,0,8,tab01); 
Draw_word(3,64,0,8,tab01);
Draw_word(0,72,0,8,pricked);
Draw_word(5,80,0,8,tab01);
Draw_word(5,88,0,8,tab01);
Draw_word(0,96,0,8,pricked);
Draw_word(7,104,0,8,tab01);
Draw_word(2,112,0,8,tab01);
// Draw_word(1,120,0,8,tab01);
DrawBmp(0,122,1,tab06);
// delay1s(10);
// clrscr();
*/
/*
Draw_word(1,0,0,8,pricked);
Draw_word(0,8,0,16,Chinese);
Draw_word(0,24,0,8,pricked);
Draw_word(1,32,0,16,Chinese);
Draw_word(0,48,0,8,pricked);
Draw_word(2,56,0,16,Chinese);
Draw_word(0,72,0,8,pricked);
Draw_word(3,80,0,16,Chinese);
Draw_word(0,96,0,8,pricked);
Draw_word(4,104,0,16,Chinese);
 */
  //显示格式:“ --|--|--|--|-- ”
Draw_word(1,0,1,8,pricked);
Draw_word(1,8,1,8,tab01);
Draw_word(5,16,1,8,tab01);
Draw_word(0,24,1,8,pricked);
Draw_word(9,32,1,8,tab01);
Draw_word(1,40,1,8,tab01);
Draw_word(0,48,1,8,pricked);
Draw_word(4,56,1,8,tab01);
Draw_word(3,64,1,8,tab01);
Draw_word(0,72,1,8,pricked);
Draw_word(5,80,1,8,tab01);
Draw_word(5,88,1,8,tab01);
Draw_word(0,96,1,8,pricked);
Draw_word(8,104,1,8,tab01);
Draw_word(7,112,1,8,tab01); 
DrawBmp(0,122,1,tab011);

delay1s(10);
clrscr(0);
}
/*************************************************功能:显示评级统计界面**************************************************/
void Vote()
{
/*
//显示格式:“ - -|-|0|+|+ +”
// Draw_word(1,0,1,8,pricked);
Draw_word(1,0,1,8,tab01);
// Draw_word(1,8,1,8,pricked);
Draw_word(1,16,1,8,tab01);
Draw_word(0,24,1,8,pricked);
Draw_word(1,32,1,8,tab01);
Draw_word(1,40,1,8)
Draw_word(0,48,1,8,pricked);
Draw_word(1,56,1,8,tab01);
Draw_word(0,64,1,8,pricked);
Draw_word(1,72,1,8,tab01);
Draw_word(0,80,1,8,pricked);
Draw_word(1,88,1,8,tab01);
Draw_word(1,96,1,8,pricked);
Draw_word(1,104,1,8,tab01);
*/
//显示格式:“ --|--|--|--|-- ”
Draw_word(1,0,1,8,pricked);
Draw_word(1,8,1,8,tab01);
Draw_word(5,16,1,8,tab01);
Draw_word(0,24,1,8,pricked);
Draw_word(9,32,1,8,tab01);
Draw_word(1,40,1,8,tab01);
Draw_word(0,48,1,8,pricked);
Draw_word(4,56,1,8,tab01);
Draw_word(3,64,1,8,tab01);
Draw_word(0,72,1,8,pricked);
Draw_word(5,80,1,8,tab01);
Draw_word(5,88,1,8,tab01);
Draw_word(0,96,1,8,pricked);
Draw_word(8,104,1,8,tab01);
Draw_word(7,112,1,8,tab01);

DrawBmp(0,122,1,tab03);

delay1s(10);
clrscr(0);
  
}
/***********************************************功能:显示评级提示界面************************************************/
void Vote_tips()
{
// delayNms(500);
// Draw_word(5,0,0,16,Chinese);
// Draw_word(16,16,0,16,Chinese);
// Draw_word(17,32,0,16,Chinese);
// Draw_word(2,48,0,8,pricked);

  DrawBmp(0,122,1,tab012);
DrawBmp(0,122,2,tab03);

delay1s(10);
clrscr(0);

}
/****************************************************************主程序******************************************************/
void main()                                                                                                                          
{                
LCD_init(); //初始化                                                  
clrscr(0); //清屏
// wait(3); //动态调用
// delay1s(5);
// DrawBmp(0,122,0,tab02);
// delay1s(5);          
while(1)
{

// DrawBmp(0,122,0,tab03); //测试显示

Vote_tips();
delay1s(2);

Vote();
delay1s(2);

toupiao_tips(2);
delay1s(2);

toupiao();
delay1s(2);

Election_tips();
delay1s(2);  

Election();
delay1s(2);
// clrscr();

}                                                        
}                
  评论这张
 
阅读(833)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017