160128中文显示温度与时间(6)

2019-04-14 19:55

安徽财经大学信息工程学院本科课程论文(设计)

dat2=(dat2&(0xFF>>b))|(Dat<

LCD_Write_Command(LC_AUT_WR); LCD_Write_Data(dat1); LCD_Write_Data(dat2);

LCD_Write_Command(LC_AUT_OVR); }

/*void SetShowMode(uchar newShowModeSW) //设置为显示模式 {

ShowModeSW=newShowModeSW;

fnPR12(LC_DIS_SW | newShowModeSW); } */

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

//= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode) //= 功 能: 在指定坐标位置显示一个点 //= 参 数: 坐标,显示点或清除点 //= 返 回 值:

//= 函数性质:私有函数

//= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型 //= Mode 1:显示 0:清除该点

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

void Pixel(unsigned char x,unsigned char y, uchar Mode) {

unsigned char Start_Addr,dat; Start_Addr=7-(x%8);

dat=LC_BIT_OP|Start_Addr; //生产位操作命令画点的数据 if(Mode) dat|=0x08; Set_LCD_Pos(y,x/8);

LCD_Write_Command(LC_BIT_OP|dat); // 写数据 }

void Exchange(uchar *a,uchar *b) {

uchar t;

t = *a;*a = *b;*b =t; }

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

//= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)

22

安徽财经大学信息工程学院本科课程论文(设计)

//= 功 能: 划线函数

//= 参 数: 坐标1,坐标2,显示点或清除点 //= 返 回 值:

//= 函数性质:私有函数

//= 其它:显示点阵不超过255*255

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

void Line( unsigned char x1,unsigned char y1, unsigned char x2,unsigned char y2, uchar Mode) reentrant {

unsigned char x,y; float k,b;

if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1 {

k=(float)(y2-y1) / (float)(x2-x1) ; b=y1-k*x1; if( x1 > x2 )

Exchange(&x1,&x2); for(x=x1;x<=x2;x++) {

y=(uchar)(k*x+b);

Pixel(x, y, Mode); } }

else {

k = (float)(x2-x1) / (float)(y2-y1); b = x1 - k*y1; if(y1 > y2)

Exchange(&y1,&y2);

for(y=y1;y<=y2;y++) {

x=(uchar)(k*y+b);

Pixel(x, y, Mode); } } }

//-------------------------------Main.c---------------------------------------------------------------------------

#include #include #include extern void LCD_Initialise();

23

安徽财经大学信息工程学院本科课程论文(设计)

extern void Display_Str_at_xy(uchar x,uchar y,char *Buffer)

reentrant;

extern void Read_Temperature(); extern void Delay (uint num);

extern float Build_Temperature_float(); extern uchar Current_Temp_Display_Buffer[]; extern bit DS18B20_IS_OK; sbit SDA = P1^0;//DS1302数据线 sbit CLK = P1^1;//DS1302时钟线 sbit RST = P1^2;//DS1302复位线 uchar tCount = 0; //星期的中文对照表

char code *WeeksTable[] = {“日”,“一”,“二”,“三”,“四”,“五”,

“六”};

//所读取的日期时间 uchar DateTime [7]; char dat_str[13];

//------------------------------------------------------------- //向DS1302写入一字节

//------------------------------------------------------------- void Write_A_Byte_To_DS1302(uchar x) {

uchar i;

for (i = 0;i < 8;i + +) {

SDA = x & 1;CLK = 1;CLK = 0;x > > = 1; } }

//------------------------------------------------------------- //从DS1302读取一字节

24

安徽财经大学信息工程学院本科课程论文(设计)

//------------------------------------------------------------- uchar Get_A_Byte_FROM_DS1302() {

uchar i,b.t;

for(i = 0;i < 8;i + +) {

b > > = 1;t = SDA;b | = t < < 7;CLK = 1;CLK = 0; }

//BCD码转换

Return b / 16 * 10 + b * % 16; }

//------------------------------------------------------------- //从DS1302指定位置读数据

//------------------------------------------------------------- uchar Read_Date(uchar addr) {

uchar dat;

RST = 0;CLK = 0;RST = 1; Write_A_Byte_To_DS1302 (addr); dat = Get_A_Byte_FROM_DS1302(); CLK = 1;RST = 0; return dat; }

//------------------------------------------------------------- //读取当前日期时间

//------------------------------------------------------------- Void GetTime () {

uchar i;

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

25

安徽财经大学信息工程学院本科课程论文(设计)

{

DateTime[i] = Read_Date(0x81 + 2*1); } }

//------------------------------------------------------------- //定时器0每秒刷新LCD显示

//------------------------------------------------------------- void T0_INT() interrupt 1 {

TH0 = - 50000 / 256; TL0 = - 50000 % 256;

if (++tCount ! = 20) return; GetTime(); tCount = 0; //显示年月日

sprintf(dat_str,“20%c%c年%c%c月%c%c日”,DateTime[6]/10+‘0’,

DateTime[6]+‘0’,DateTime[4]/10+‘0’, DateTime[4]+‘0’,DateTime[3]/10+‘0’,DateTime[3]+‘0’);

Display_Str_at_xy(16,24,dat_str); //显示星期

sprintf(dat_str,“星期%s”,WeeksTable[DateTime[5] – 1]); Display_Str_at_xy(16,44,dat_str); //星期时分秒

sprintf(dat_str,“%c%c时%c%c分%c%c秒”,DateTime[2]/10+‘0’,

DateTime[2]+‘0’,DateTime[1]/10+‘0’, DateTime[1]+‘0’,DateTime[0]/10+‘0’, DateTime[0]+‘0’);

Display_Str_at_xy(16,64,dat_str); //读取并显示当前温度 Read_Temperature(); if (DS18B20_IS_OK)

26


160128中文显示温度与时间(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:英美概况复习资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: