TFT液晶显示时钟程序.docx

上传人:b****6 文档编号:8742981 上传时间:2023-02-01 格式:DOCX 页数:18 大小:17.81KB
下载 相关 举报
TFT液晶显示时钟程序.docx_第1页
第1页 / 共18页
TFT液晶显示时钟程序.docx_第2页
第2页 / 共18页
TFT液晶显示时钟程序.docx_第3页
第3页 / 共18页
TFT液晶显示时钟程序.docx_第4页
第4页 / 共18页
TFT液晶显示时钟程序.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

TFT液晶显示时钟程序.docx

《TFT液晶显示时钟程序.docx》由会员分享,可在线阅读,更多相关《TFT液晶显示时钟程序.docx(18页珍藏版)》请在冰豆网上搜索。

TFT液晶显示时钟程序.docx

TFT液晶显示时钟程序

TFT液晶显示时钟程序

说明:

该程序文件中包含三个.c文件和三个.h文件,方便读者理解程序的层次性和关联性。

该程序的功能是利用51单片机实现逻辑控制,在液晶显示屏上显示动态时钟。

1.shizhong.c(实际上是主程序):

#include"REG51.H"

#include"gui.h"

unsignedcharcount;

#definekeyP1

sbitK=P2^0;

unsignedchara;

unsignedcharb;

unsignedcharc;

unsignedchard;

unsignedchare;

unsignedcharf;

unsignedcharg;

unsignedcharsw;

unsignedcharh1=0;

unsignedcharh2=0;

unsignedcharh3=0;

unsignedintq;

voidKeyboard()

{

unsignedintk;

key=0xf0;

if(key!

=0xf0)

{

for(q=0;q<800;q++);

if(key!

=0xf0)

{

key=0x0f;

switch(key)

{

case(0x0e):

k=0;break;

case(0x0d):

k=4;break;

case(0x0b):

k=8;break;

case(0x07):

k=12;break;

}

key=0xf0;

switch(key)

{

case(0xe0):

k=k;break;

case(0xd0):

k=k+1;break;

case(0xb0):

k=k+2;break;

case(0x70):

k=k+3;break;

}

while(key!

=0xf0);

switch(k)

{

case0:

f++;P0=0x01;if(f==3){f=0;}break;

case1:

e++;P0=0x02;if(f<2){if(e==10){e=0;}}if(f==2){if(e==4){e=0;}}break;

case2:

d++;P0=0x04;if(d==6){d=0;}break;

case3:

c++;P0=0x08;if(c==10){c=0;}break;

case4:

b++;P0=0x10;if(b==6){b=0;}break;

case5:

a++;P0=0x20;if(a==10){a=0;}break;

case6:

sw=0;break;

case7:

sw=1;break;

}

}

}

}

 

voidjishu()

{

K=1;

if(K==0)

{

for(q=0;q<800;q++);

if(K==0)

{

h1++;

if(h1==10)

{

h1=0;

h2++;

if(h2==10)

{

h2=0;

h3++;

}

}

while(K==0);

}

}

GUI_WriteASCII(0,50,h3,RED,WHITE);

GUI_WriteASCII(16,50,h2,RED,WHITE);

GUI_WriteASCII(32,50,h1,RED,WHITE);

}

 

voidmain(void)

{

TFT_Init();

TFT_ClearScreen(BLACK);

EA=1;

ET1=1;

TMOD=0x10;

TH1=15536/256;

TL1=15536%256;

TR1=1;

a=0;

b=0;

c=0;

d=0;

e=0;

f=0;

g=10;

count=0;

sw=1;

GUI_WriteASCII(0,50,0,RED,WHITE);

GUI_WriteASCII(16,50,0,RED,WHITE);

GUI_WriteASCII(32,50,0,RED,WHITE);

while

(1)

{

while(sw)

{

TR1=1;

jishu();

if(count>=20)

{

count=0;a++;

if(a==10)

{

a=0;b++;

if(b==6)

{

b=0;c++;

if(c==10)

{

c=0;d++;

if(d==6)

{

d=0;e++;

if(f<2&&e==10)

{

e=0;f++;

}

if(f==2&&e==4)

{f=0;e=0;}

}

}

}

}

GUI_WriteASCII(0,0,f,RED,WHITE);

GUI_WriteASCII(16,0,e,RED,WHITE);

GUI_WriteASCII(32,0,g,RED,WHITE);

GUI_WriteASCII(48,0,d,RED,WHITE);

GUI_WriteASCII(64,0,c,RED,WHITE);

GUI_WriteASCII(80,0,g,RED,WHITE);

GUI_WriteASCII(96,0,b,RED,WHITE);

GUI_WriteASCII(112,0,a,RED,WHITE);

}

Keyboard();

}

Keyboard();

GUI_WriteASCII(0,0,f,RED,WHITE);

GUI_WriteASCII(16,0,e,RED,WHITE);

GUI_WriteASCII(32,0,g,RED,WHITE);

GUI_WriteASCII(48,0,d,RED,WHITE);

GUI_WriteASCII(64,0,c,RED,WHITE);

GUI_WriteASCII(80,0,g,RED,WHITE);

GUI_WriteASCII(96,0,b,RED,WHITE);

GUI_WriteASCII(112,0,a,RED,WHITE);

TR1=0;

}

}

 

voidTime1(void)interrupt3

{

count++;

TH1=15536/256;

TL1=15536%256;

}

2.gui.c:

#include"gui.h"

#include"charcode.h"

#ifdefUSE_ASCII

voidGUI_WriteASCII(ucharx,uchary,ucharp,uintwordColor,uintbackColor)

{

ucharj,wordByte,wordNum;

uintcolor;

wordNum=p;

TFT_SetWindow(x,y,x+15,y+23);

for(wordByte=0;wordByte<48;wordByte++)

{

color=ASCII16x24[wordNum][wordByte];

for(j=0;j<8;j++)

{

if((color&0x80)==0x80)

{

TFT_WriteData(wordColor);

}

else

{

TFT_WriteData(backColor);

}

color<<=1;

}

}

}

#endif

3.driver.c:

#include"driver.h"

/****************************************************************************

*函数名:

TFT_WriteCmd

*输入:

cmd

*输出:

*功能:

写命令。

****************************************************************************/

voidTFT_WriteCmd(uintcmd)

{

ucharcmdH,cmdL;

cmdH=cmd>>8;

cmdL=cmd&0x00FF;

TFT_WR=1;//初始化WR

TFT_CS=0;//打开片选

TFT_RD=1;//选择写

TFT_RS=0;//选择命令

TFT_DATAPORTH=cmdH;//放置命令数据

TFT_DATAPORTL=cmdL;//放置命令数据

TFT_WR=0;//写入时序

TFT_WR=1;

TFT_CS=1;//关闭片选

}

/****************************************************************************

*函数名:

TFT_WriteCmdData

*输入:

cmd,dat

*输出:

*功能:

写命令,写数据。

****************************************************************************/

voidTFT_WriteData(uintdat)

{

uchardatH,datL;

datH=dat>>8;

datL=dat&0x00FF;

TFT_WR=1;//初始化WR

TFT_CS=0;//打开片选

TFT_RD=1;//选择写

TFT_RS=1;//选择发送数据

TFT_DATAPORTH=datH;//放置命令数据

TFT_DATAPORTL=datL;//放置命令数据

TFT_WR=0;//写入时序

TFT_WR=1;

TFT_CS=1;//关闭片选

}

/****************************************************************************

*函数名:

TFT_Init

*输入:

*输出:

*功能:

初始化TFT。

****************************************************************************/

voidTFT_Init(void)

{

uinti;

TFT_RST=1;

for(i=500;i>0;i--);

TFT_RST=0;

for(i=500;i>0;i--);

TFT_RST=1;

for(i=5000;i>0;i--);

TFT_CS=0;

TFT_WriteCmd(0x11);

TFT_WriteCmd(0xc5);

TFT_WriteData(0xc5);

TFT_WriteCmd(0xf0);

TFT_WriteData(0x5a);

TFT_WriteCmd(0xf2);

TFT_WriteData(0x01);

TFT_WriteCmd(0xe0);

TFT_WriteData(0x00);

TFT_WriteData(0x01);

TFT_WriteData(0x06);

TFT_WriteData(0x2e);

TFT_WriteData(0x2b);

TFT_WriteData(0x0b);

TFT_WriteData(0x1a);

TFT_WriteData(0x02);

TFT_WriteData(0x06);

TFT_WriteData(0x05);

TFT_WriteData(0x0c);

TFT_WriteData(0x0d);

TFT_WriteData(0x00);

TFT_WriteData(0x05);

TFT_WriteData(0x02);

TFT_WriteData(0x05);

TFT_WriteCmd(0xe1);

TFT_WriteData(0x06);

TFT_WriteData(0x23);

TFT_WriteData(0x25);

TFT_WriteData(0x0f);

TFT_WriteData(0x0a);

TFT_WriteData(0x04);

TFT_WriteData(0x02);

TFT_WriteData(0x1a);

TFT_WriteData(0x05);

TFT_WriteData(0x03);

TFT_WriteData(0x06);

TFT_WriteData(0x01);

TFT_WriteData(0x0c);

TFT_WriteData(0x0b);

TFT_WriteData(0x05);

TFT_WriteData(0x05);

TFT_WriteCmd(0x3a);

TFT_WriteData(0x05);

TFT_WriteCmd(0x36);

TFT_WriteData(0xC8);

TFT_WriteCmd(0x29);

}

/****************************************************************************

*函数名:

TFT_SetWindow

*输入:

xStart,yStart,xEnd,yEnd

*输出:

*功能:

设置要操作的窗口。

****************************************************************************/

voidTFT_SetWindow(ucharxStart,ucharyStart,ucharxEnd,ucharyEnd)

{

TFT_WriteCmd(0x2A);

TFT_WriteData(0x00);

TFT_WriteData(xStart);

TFT_WriteData(0x00);

TFT_WriteData(xEnd);

TFT_WriteCmd(0x2b);

TFT_WriteData(0x00);

TFT_WriteData(yStart);

TFT_WriteData(0x00);

TFT_WriteData(yEnd);

TFT_WriteCmd(0x2c);

}

 

/****************************************************************************

*函数名:

GUI_Clearcreen

*输入:

backColor

*输出:

*功能:

清屏并涂上颜色。

****************************************************************************/

voidTFT_ClearScreen(uintcolor)

{

uinti,j;

TFT_SetWindow(0,0,TFT_XMAX,TFT_YMAX);//作用区域

for(i=0;i<=TFT_XMAX;i++)

{

for(j=0;j<=TFT_YMAX;j++)

{

TFT_WriteData(color);

}

}

}

4.driver.h

#ifndef_DRIVER_H

#define_DRIVER_H

 

#include

//---重定义关键词---//

#ifndefuchar

#defineucharunsignedchar

#endif

#ifndefuint

#defineuintunsignedint

#endif

//---定义使用的IO口---//

sbitTFT_RST=P3^3;//复位

sbitTFT_CS=P3^2;//片选

sbitTFT_RS=P2^7;//数据命令选择端

sbitTFT_WR=P2^6;//读写控制

sbitTFT_RD=P2^5;//读写控制

#defineTFT_DATAPORTHP1//放置高8位数据

#defineTFT_DATAPORTLP0

//---定义屏的大小---//

#defineTFT_XMAX((uchar)175)////设置TFT屏的大小

#defineTFT_YMAX((uchar)219)//

//---定义颜色的宏---//

#defineWHITE0xFFFF

#defineBLACK0x0000

#defineBLUE0x001F

#defineRED0xF800

#defineMAGENTA0xF81F

#defineGREEN0x07E0

#defineCYAN0x7FFF

#defineYELLOW0xFFE0//定义颜色的宏

//--声明全局函数--//

voidTFT_WriteCmd(uintcmd);

voidTFT_WriteData(uintdat);

voidTFT_Init(void);

voidTFT_SetWindow(ucharxStart,ucharyStart,ucharxEnd,ucharyEnd);

voidTFT_ClearScreen(uintcolor);

#endif

5.gui.h

#ifndef_GUI_H_

#define_GUI_H_

#include"driver.h"

#defineUSE_ASCII

voidGUI_WriteASCII(ucharx,uchary,ucharp,uintwordColor,uintbackColor);

#endif

6.charcode.h

#ifndef__CHARCODE_H

#define__CHARCODE_H

#ifdefUSE_ASCII

constunsignedcharcodeASCII16x24[11][48]=

{

/*--文字:

0--*/

/*--宋体18;此字体下对应的点阵为:

宽x高=12x24--*/

/*--宽度不是8的倍数,现调整为:

宽度x高度=16x24--*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x30,0xC0,

0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,

0x60,0x60,0x30,0xC0,0x30,0xC0,0x19,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},

/*--文字:

1--*/

/*--宋体18;此字体下对应的点阵为:

宽x高=12x24--*/

/*--宽度不是8的倍数,现调整为:

宽度x高度=16x24--*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x00,0x3E,0x00,

0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,

0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,},

/*--文字:

2--*/

/*--宋体18;此字体下对应的点阵为:

宽x高=12x24--*/

/*--宽度不是8的倍数,现调整为:

宽度x高度=16x24--*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x80,0x40,0xC0,

0x60,0xC0,0x60,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x04,0x00,0x08,0x00,

0x10,0x40,0x20,0x40,0x40,0x40,0x7F,0xC0,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,},

/*--文字:

3--*/

/*--宋体18;此字体下对应的点阵为:

宽x高=12x24--*/

/*--宽度不是8的倍数,现调整为:

宽度x高度=16x24--*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x23,0x00,0x61,0x80,

0x61,0x80,0x61,0x80,0x01,0x80,0x03,0x00,0x0E,0x00,0x01,0x80,0x00,0x80,0x00,0xC0,

0x60,0xC0,0x60,0xC0,0x60,0xC0,0x21,0x80,0x1F,0x00,0x00,0x00,0x00,0x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1