您的位置 首页 电路

多功能智能控制器

一、使用说明:本《多功能智能控制器》是我业余时间设计的一款小型智能控制器。此控制器主要是利用AT89C52作为主控制器件,以2*8LCD作为…

一、运用阐明:

本《多功用智能操控器》是我业余时刻规划的一款小型智能操控器。此操控器主要是运用AT89C52作为主操控器材,以2*8LCD作为显现,具有手动、遥控、守时等方法操控继电器,且具有温度显现功用等。能够放在任何需求智能操控的当地。

功用阐明:

守时器的基本功用:

1.运用2*8LCD液晶模块显现器显现现在的时刻。

2.显现格局为“HH:MM:SS”,在第二行显现时刻。

3.由WLED和冒号闪耀来做秒计数表明。

手动按键的基本功用:

1.操作键K1:进入或退出设置现在的时刻。

2.操作键K2:整点报时开关。并有相应的指示灯DLED显现(DLED亮则整点报时,DLED灭则不整点报时)。

3.操作键K3:闹铃操控开关。并有相应的指示灯CLED显现(CLED亮则闹铃敞开,DLED灭则封闭闹铃)。

4.操作键K4:进入或退出闹铃时刻设置。

5.操作键K5:继电器1手动开关。并有相应的指示灯显现。

6.操作键K6:继电器2手动开关。

注:以上按键阐明都是按键的榜首功用按键。K2的第二功用是小时的加;K3的第二功用时分钟的加。

遥控按键的基本功用:

现在时刻设置:

1.TIME:进入设置现在的时刻。

2.下一首歌按键:表明分钟的加。

3.上一首歌按键:表明小时的加。

4.中止按键:表明退呈现在时刻设置。

开关功用:

R/L:表明整点报时开关。

P/N:表明闹铃开关。

闹铃时刻设置:

1.RETURN:进入闹铃时刻设置。

2.向前快进:表明小时加。

3.向后快进:表明分钟加。

4.中止按键:表明退出闹铃时刻设置。

二、三D图:

三、程序:

1.体系头文件:

#ifndef __CONFIG_H__

#define __CONFIG_H__

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

/* “以下为体系配置” */

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

#include

#include

#include

#include “ir.h”

#include “lcd1602.h

#include “ds18b20.h”

#define RELAY P3_5 // 继电器1引脚

#define FELAY P3_6 // 继电器2引脚

#define F_LED P2_3 // 继电器2作业指示灯

#define Y_LED P2_4 // 继电器1作业指示灯

#define C_LED P2_5 // 守时操控指示灯

#define D_LED P2_6 // 整点报时指示灯

#define W_LED P2_7 // 时钟作业指示灯

#define K1 P1_0 // 当时时刻的设置与完毕

#define K2 P1_1 // 整点报时开关/小时加1

#define K3 P1_2 // 闹铃操控开关/分钟加1

#define K4 P1_3 // 闹铃时刻的设置与完毕

#define K5 P1_4 // 手动操控继电器1

#define K6 P1_5 // 手动操控继电器2

uchar hour,min,sec; // 当时时刻寄存器

uchar armhour,armmin,armsec; // 操控时刻寄存器

uchar con_1s; // 时刻计数器

uchar data Time[8]={0x30,0x30,0x3a,0x30,0x30,0x3a,0x30,0x30}; // 显现时刻暂存

void turn_on_information(void);//开机信息信息

// 时刻操控部分

void TimeOut(void);//到点作业

void O_clock(void);//整点报时

void Scan(bit mark,bit line,uchar arr[]);//显现

// 手动操控部分函数

void Keyscan(void); // 手动按键扫描

void Set_time(void); // 手动设置当时时刻

void Set_ctrltime(void); // 手动设置操控时刻

// 遥控部分函数

void Telecontrol(void); // 遥控按键扫描

void Tele_Set_time(void); // 遥控设置当时时刻

void Tele_Set_ctrltime(void); // 遥控设置操控时刻

// 暗码锁部分函数

void Coded_lock(void);

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

函 数 名:void Clearmen(void)

功 能:体系初始化

说 明:对体系引脚变量及中止进行初始化

进口参数:无

返 回 值:无

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

void Clearmen(void)

{

//***************** 中止初始化 *****************

// 中止答应寄存器IE

/*—————————————————-

| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |

– – – – – – – – – – – – – – – – – – – – – – – –

| EA | | ET2 | ES | ET1 | EX1 | ET0 | EX0 |

—————————————————–*/

IE = 0x00; // “铲除中止”

EX0 = 1; // 0″外部中止0答应”

ET0 = 1; // 1″守时器0中止答应”

EX1 = 0; // 2″外部中止1答应”

ET1 = 1; // 3″守时器1中止答应”

ES = 0; // 4″串行中止答应”

ET2 = 0; // 5″守时器2中止答应”-52才有

EA = 1; // “中止总答应”

// 中止优先级办理寄存器IP

/*—————————————————-

| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |

– – – – – – – – – – – – – – – – – – – – – – – –

| | | PT2 | PS | PT1 | PX1 | PT0 | PX0 |

—————————————————–*/

IP = 0x00; // “铲除中止优先级”

PS = 0; // “串行中止优先”

PX0 = 0; // “外部中止0”

PT0 = 1; // “守时器中止0″

PX1 = 0; // “外部中止1”

PT1 = 0; // “守时器中止1”

// 守时器操控寄存器TCON

/*—————————————————-

| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |

– – – – – – – – – – – – – – – – – – – – – – – –

| TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |

– – – – – – – – – – – – – – – – – – – – – – – –

| 用于守时器 | 用于外中止 |

—————————————————–*/

TCON = 0x00;

IT0 = 1; // “外部中止0触发方法 0=电平 1=边缘”

IE0 = 0; // “外部中止0请求标志”

IT1 = 0; // “外部中止1触发方法 0=电平 1=边缘”

IE1 = 0; // “外部中止1请求标志”

TR0 = 0; // “T0运转操控”

TF0 = 0; // “T0溢出标志”

TR1 = 0; // “T1运转操控”

TF1 = 0; // “T1溢出标志”

// 守时器形式操控寄存器TMOD

/*—————————————————-

| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |

– – – – – – – – – – – – – – – – – – – – – – – –

|GATE| C/T| M0 | M1 |GATE | C/T | M0 | M1 |

– – – – – – – – – – – – – – – – – – – – – – – –

| 高4位用于T1 | 低4位用于T0″ |

—————————————————–*/

TMOD=0x11; // 守时器T0、T1为16位守时形式1

TH0=0x3C;TL0=0xB0; // 守时器0赋初值

TH1=0x3C;TL1=0xB0; // 守时器1赋初值

ET0=1;TR0=1;EA=1; // 开守时器0

//***************** 变量及引脚初始化 **********************************

hour=0; min=0; sec=0; // 当时时刻初始化

armhour=0;armmin=0;armsec=0; // 操控时刻初始化

IRIN=1;BEEP=1;RELAY=1; FELAY=1;

W_LED=1;D_LED=1;C_LED=1; // 指示灯初始化

F_LED=1;Y_LED=1;

Adjust_Res(0x5f); // 调整18B20的分辨率 0x1f:0.5; 0x3f:0.25; 0x5f:0.125

}

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

函 数 名:void Delay_50us(uint t)

功 能:延时函数

说 明:体系用延时

进口参数:无

返 回 值:无

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

void Delay_50us(uint t)

{

uchar j;

for(;t>0;t–)

for(j=19;j>0;j–)

;

}

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

函 数 名:void Work_led(uchar count)

功 能:作业指示灯闪耀提示

说 明:闪耀以提示作业状况

进口参数:无

返 回 值:无

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

Work_led(uchar count)

{

while(count–)

{

W_LED=~W_LED; //作业灯取反

Delay_50us(3000);

}

C_LED=1;

}

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

函 数 名:void turn_on_information(void)

功 能:开机显现信息

说 明:第1行显现产品名;第2行动态显现作者信息

进口参数:无

返 回 值:无

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

uchar code string[]=” 2008-1-20″;

void turn_on_information(void)

{

uchar num=30;

uchar *cp;

cp=string;

do

{

WriteCommandLCM(0x01,1); // 显现清屏

Delay_50us(100);

DisplayListChar(0,0,”zhao jun”);

DisplayListChar(0,1,cp);

Delay_50us(8000);

cp++;

if(*cp==\0)

{

cp=string; // 抵达字符的尾部时,改动指针,从头指向字符串的头部

}

}while(num–);

WriteCommandLCM(0x01,1); // 显现清屏

}

#endif

2.温度部分:

/*————————————————————————–

TEMPERATURE.H

The user function is C51.

Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun

All rights reserved.

————————————————————————–*/

#ifndef __TEMPERATURE_H__

#define __TEMPERATURE_H__

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P3^3;//ds18b20单片机衔接口

uchar data Tp[8];//温度显现数据

/******************************ds1820程序***************************************/

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

函 数 名:void Delay_DS(uint useconds)

功 能:DS18B20延时1微秒

说 明:DS18B20时序延时

进口参数:useconds

返 回 值:无

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

//延时

void Delay_DS(uint useconds)//延时1微秒

{

while(useconds–);

}

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

函 数 名:void Ow_Reset()

功 能:DS18B20复位

说 明:DS18B20运用时先要复位

进口参数:无

返 回 值:

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

void Ow_Reset()

{

DQ = 1; // DQ复位

Delay_DS(4); // 延时

DQ = 0; // DQ拉低

Delay_DS(100); // 准确延时大于480us

DQ = 1; // 拉高

Delay_DS(40);

}

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

函 数 名:uchar Read_byte()

功 能:从 1-wire 总线上读取一个字节

说 明:读总线上的数据有严厉的时序

进口参数:

返 回 值:value

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

uchar Read_byte()

{

uchar i=0;

uchar value = 0;

for (i=8;i>0;i–)

{

DQ = 0; // 给脉冲信号

value>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

value|=0x80;

Delay_DS(10);

}

return(value);

}

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

函 数 名:void Write_Byte()

功 能:向 1-WIRE 总线上写一个字节

说 明:写总线上的数据有严厉的时序

进口参数:val

返 回 值:无

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

void Write_Byte(uchar val)

{

uchar i=0;

for (i=8; i>0; i–)

{

DQ = 0;

DQ = val&0x01;

Delay_DS(10);

DQ = 1;

val>>=1;

}

}

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

函 数 名:void Read_Temperature()

功 能:读温度并放入显现数组中

说 明:

进口参数:xx,yy

返 回 值:无

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

void Read_Temperature()

{

uchar a,b;

uchar tflag; // 温度正负标志

uint tvalue; // 温度值

Ow_Reset();

Write_Byte(0xcc); // 越过读序列号*

Write_Byte(0x44); // 发动温度转化

Ow_Reset();

Write_Byte(0xcc); // 越过读序列号

Write_Byte(0xbe); // 读取温度

a=Read_byte(); // 读出温度低8位

b=Read_byte(); // 读出温度高8位

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)

tflag=0;

else

{

tvalue=~tvalue+1;

tflag=1;

}

tvalue=tvalue*(0.625); // 温度值扩展10倍,准确到1位小数

Tp[2]=tvalue%1000/100+0x30; // 十位数

Tp[3]=tvalue%100/10+0x30; // 个位数

Tp[4]=0x2e; // 显现小数点

Tp[5]=tvalue%10+0x30; // 显现温度小数位

Tp[6]=0x01; // 显现自界说字符

Tp[7]=0x43; // 显现字符”C”

if(tflag==0)

Tp[1]=0x20; // 正温度不显现符号

else

Tp[1]=0x2d; // 负温度显现负号:-

if(Tp[2]==0x30)

{

Tp[2]=0x20; // 假如十位为0,不显现

}

}

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

函 数 名:void Adjust_Res()

功 能:温度分辨率调整

说 明:此函数能够对温度的显现进行精度调理.

进口参数:res

返 回 值:无

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

void Adjust_Res(char res) // res 别离等于 0x1f, 0x3f, 0x5f 温度读数分辨率别离对应

// 0.5, 0.25, 0.125

{

Ow_Reset(); // 复位

Write_Byte(0xcc); // 越过Rom

Write_Byte(0x4e); // 写暂存器

Write_Byte(0x02); // 写TH

Write_Byte(0x01); // 写TL

Write_Byte(res); // 温度转化分辨率设置

Ow_Reset(); // 复位

Write_Byte(0xcc); // 越过Rom

Write_Byte(0x48); // 把暂存器内容写到EPRam中

}

#endif

3.红外部分:

/*————————————————————————–

IR.H

The user function is C51.

Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun

All rights reserved.

————————————————————————–*/

#ifndef __IR_H__

#define __IR_H__

#define uchar unsigned char

#define uint unsigned int

#define IRIN P3_2 // 红外引脚

#define BEEP P3_7 // 蜂鸣器引脚

uchar IRCOM[4]; // IRCOM[0]和IRCOM[1]寄存用户编码;IRCOM[2]键值码暂存

// IRCOM[3]键值反码寄存.

/*======================================== 红外解码部分 ======================================================*/

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

函 数 名:void DelayIR(uchar number)

功 能:延时程序

说 明:对红外信号进行解码时的时刻比较

进口参数:无

返 回 值:无

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

void DelayIR(uchar number)//number*0.14MS

{

uchar i;

while(number–)

{

for(i=13;i>0;i–);

}

}

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

函 数 名:void Delay_bell(void)

功 能:蜂鸣器延时程序

说 明:对蜂鸣器发音延时

进口参数:无

返 回 值:无

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

void Delay_bell(void)

{

uint i;

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

;

}

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

函 数 名:void Buzzer(num)

功 能:蜂鸣器发音程序

说 明:对暗码输入正确与否、按键等的提示

进口参数:无

返 回 值:无

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

void Buzzer(num)

{

while(num–)

{

BEEP=0; // 灯亮

Delay_bell(); // 延时

BEEP=1; // 灯灭

Delay_bell(); // 延时

}

}

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

函 数 名:void IR_IN() interrupt 0 using 0

功 能:红外解码

说 明:把红外编码信号进行解码,并寄存在IRCOM[]中

进口参数:无

返 回 值:无

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

// 外中止0,红外数据接纳

void IR_IN() interrupt 0 using 0

{

uchar i,j,k,num=0;

EX0 = 0;

do // 读引导码

{

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

{

if(IRIN==0)break;

if(i==3) {EX0=1;return;}

}

DelayIR(20);

}while(IRIN==1); // 承认IR信号呈现

while(!IRIN){DelayIR(1);} // 等IR变为高电平

// 读4字节按键编码 = 16位的用户码+8位键值码+8位键值反码

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

{ // 解码原理:0=0.8ms的低电平+0.4ms的高电平;1=0.8ms的低电平+1.6ms的高电平

for(k=0;k<8;k++) // 8位一接纳

{

while(IRIN){DelayIR(1);} // 等 IR 变为低电平

while(!IRIN){DelayIR(1);} // 等 IR 变为高电平

while(IRIN) // 核算IR高电平时长

{

DelayIR(1);

num++;

if(num>=30){EX0=1;return;}

}

IRCOM[j]=IRCOM[j]>>1; // 接纳数据右移一位

if(num>=8){IRCOM[j]=IRCOM[j]|0x80;} // 电平长度大于等于8,则写入高电平

num=0;

} // 读完一字节

} // 按键4字节读完

// 接纳数据检测

if(IRCOM[2]!=~IRCOM[3]){EX0=1;return;} // 8位键码!=8位键反码:按键过错

Buzzer(1); // 有键按下,蜂鸣器响一声

EX0 = 1; // 开外中止

}

/*===================================

DT9122D 遥控器

****** 红外遥控器键值表 ***********

| 10 | 03 | 01 | 06 |

– – – – – – – – – – – – – – – – – – –

| 09 | 1D | 1F | 0D |

– – – – – – – – – – – – – – – – – – –

| 19 | 1B | 11 | 15 |

– – – – – – – – – – – – – – – – – – –

| 17 | 12 | 16 | 4C |

– – – – – – – – – – – – – – – – – – –

| 40 | 48 | 04 | 00 |

– – – – – – – – – – – – – – – – – – –

| 02 | 05 | 54 | 4D |

– – – – – – – – – – – – – – – – – – –

| 0A | 1E | 0E | 1A |

– – – – – – – – – – – – – – – – – – –

| 1C | 14 | 0F | 0C |

=====================================*/

#endif

4.LCD1602部分:

/*————————————————————————–

LCD1602.H

The user function is C51.

Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun

All rights reserved.

————————————————————————–*/

#ifndef __LCD1602_H__

#define __LCD1602_H__

/*衔接线图:

—————————————————

| LCM—–51  | LCM—–51  | LCM——51 |

| ———————————————– |

| DB0—–P0.0 | DB4—–P0.4 | RS——-P2.0 |

| DB1—–P0.1 | DB5—–P0.5 | RW——-P2.1 |

| DB2—–P0.2 | DB6—–P0.6 | E——–P2.2 |

| DB3—–P0.3 | DB7—–P0.7 | VLCD接1K电阻到GND |

—————————————————*/

/****************** LCD1602指令 ***********************************/

//输入方法设置

#define LCD_AC_AUTO_INCREMENT 0x06 // 数据读、写操作后,AC主动增一

#define LCD_AC_AUTO_DECREASE 0x04 // 数据读、写操作后,AC主动减一

#define LCD_MOVE_ENABLE 0x05 // 数据读、写操作,画面平移

#define LCD_MOVE_DISENABLE 0x04 // 数据读、写操作,画面不动

#define LCD_GO_HOME 0x02 // AC=0,光标、画面回HOME位

//设置显现、光标及闪耀开、关

#define LCD_DISPLAY_ON 0x0C // 显现开

#define LCD_DISPLAY_OFF 0x08 // 显现关

#define LCD_CURSOR_ON 0x0A // 光标显现

#define LCD_CURSOR_OFF 0x08 // 光标不显现

#define LCD_CURSOR_BLINK_ON 0x09 // 光标闪耀

#define LCD_CURSOR_BLINK_OFF 0x08 // 光标不闪耀

//光标、画面移动,不影响DDRAM

#define LCD_LEFT_MOVE 0x18 // LCD显现左移一位

#define LCD_RIGHT_MOVE 0x1C // LCD显现右移一位

#define LCD_CURSOR_LEFT_MOVE 0x10 // 光标左移一位

#define LCD_CURSOR_RIGHT_MOVE 0x14 // 光标右移一位

//作业方法设置

#define LCD_DISPLAY_DOUBLE_LINE 0x38 // 两行显现

#define LCD_DISPLAY_SINGLE_LINE 0x30 // 单行显现

#define LCD_CLEAR_SCREEN 0x01 // 清屏

/***********************LCD1602地址相关******************************/

#define LINE1_HEAD 0x80 // 榜首行DDRAM开端地址

#define LINE2_HEAD 0xc0 // 第二行DDRAM开端地址

#define LINE1 0 // 榜首行

#define LINE2 1 // 第二行

#define LINE_LENGTH 8 // 每行的最大字符长度

/***********************LCD1602接线引脚界说**************************/

#define LCM_RS P2_0 // 数据/指令挑选信号

#define LCM_RW P2_1 // 读/写挑选信号

#define LCM_E P2_2 // 使能信号

#define LCM_Data P0 // 显现数据端口

#define Busy 0x80 // 用于检测LCM状况字中的Busy标识

#define uchar unsigned char

#define uint unsigned int

//================================ LCM1602操控部分 =========================================================

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

函 数 名:void Delay_LCD(void)

功 能:5ms延时

说 明:LCD显现延时

进口参数:无

返 回 值:无

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

void Delay_LCD(void)

{

uint TempCyc = 5552; // 放入延时数据

while(TempCyc–);

}

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

函 数 名:uchar ReadStatusLCM()

功 能:读忙状况

说 明:判别LCM的作业状况;也能够不必此函数,用一段延时程序替代

进口参数:无

返 回 值:LCM_Data

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

//读状况

uchar ReadStatusLCM(void)

{

LCM_Data = 0xFF; // LCM数据口先置1

LCM_RS = 0;

LCM_RW = 1;

LCM_E = 0;

LCM_E = 0;

LCM_E = 1;

while (LCM_Data & Busy); // 检测忙信号.假如忙,则不履行

return(LCM_Data); // 不忙回来读取数据

}

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

函 数 名:void WriteDataLCM()

功 能:向LCM1602中写入数据

说 明:将形参WDLCM中的数据写入LCM中

进口参数:WDLCM

返 回 值:无

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

//写数据

void WriteDataLCM(uchar WDLCM)

{

ReadStatusLCM(); // 检测忙

LCM_Data = WDLCM; // 写入数据到LCM

LCM_RS = 1;

LCM_RW = 0;

LCM_E = 0; // 若晶振速度太高能够在这后加小的延时

LCM_E = 0; // 延时

LCM_E = 1;

}

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

函 数 名:void WriteCommandLCM()

功 能:向LCM1602中写入指令

说 明:向LCM中写入指令;假如BuysC=0时,疏忽忙检测,假如BuysC=1时,不疏忽忙检测

进口参数:WCLCM,BuysC

返 回 值:无

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

//写指令

void WriteCommandLCM(uchar WCLCM,BuysC) // BuysC为0时疏忽忙检测

{

if (BuysC) ReadStatusLCM(); // 根据需求检测忙

LCM_Data = WCLCM; // 写入指令

LCM_RS = 0;

LCM_RW = 0;

LCM_E = 0;

LCM_E = 0;

LCM_E = 1;

}

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

函 数 名:void LCMInit()

功 能:初始化LCM1602

说 明:LCM在作业前先要对显现屏初始化,不然模块无法正常作业

进口参数:无

返 回 值:无

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

//LCM初始化

void LCMInit(void)

{

LCM_Data = 0;

WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0); // 三次显现形式设置,不检测忙信号

Delay_LCD();

WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0); // 0x38指令表明:8位数据显现形式,俩行多显现

Delay_LCD();

WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0);

Delay_LCD();

WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,1); // 显现形式设置,开端要求每次检测忙信号

WriteCommandLCM(LCD_DISPLAY_OFF,1); // 封闭显现

WriteCommandLCM(LCD_CLEAR_SCREEN,1); // 显现清屏

WriteCommandLCM(LCD_AC_AUTO_INCREMENT,1); // 显现光标移动设置

WriteCommandLCM(LCD_DISPLAY_ON,1); // 显现开及光标设置

}

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

函 数 名:void DisplayOneChar()

功 能:按指定坐标中写入数据

说 明:X-横坐标,Y-纵坐标,DData为ASCII值

进口参数:X,Y,DData

返 回 值:无

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

//按指定方位显现一个字符

void DisplayOneChar(uchar X, uchar Y, uchar DData)

{

Y &= 0x01;

X &= 0x0F; // 约束X不能大于15,Y不能大于1

if (Y) X |=LINE2_HEAD; // 当要显现第二行时地址码:0xc0

X |= LINE1_HEAD; // 榜首行的地址码:0x80

WriteCommandLCM(X, 0); // 这儿不检测忙信号,发送地址码

WriteDataLCM(DData);

}

/*在LCD1602中运用此函数,在DIPS082中运用下面的函数

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

函 数 名:void DisplayListChar(uchar x,uchar y,uchar *DData)

功 能:向指定坐标中写入字符串(在LCD1602中运用此函数)

说 明:X-横坐标,Y-纵坐标

进口参数:X,Y,*DData

返 回 值:无

*****************************************************

//按指定方位显现字符串

void DisplayListChar(uchar x,uchar y,uchar *DData)

{

if(y==LINE1) // 判别是否写入第1行

{

if(x

{

WriteCommandLCM(LINE1_HEAD+x,0); // 写入第1行地址

for(;x

{

WriteDataLCM(*(DData++)); // 写入数据

}

if(*DData!=\0) // 判别数据是否写完

{

x=0; // 没写完写入第2行

y=LINE2;

}

}

}

if(y==LINE2) // 判别是否写入第2行

{

WriteCommandLCM(LINE2_HEAD+x,0); // 写入第2行地址

for(;x

{

WriteDataLCM(*(DData++)); // 写入数据

}

}

}*/

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

函 数 名:void DisplayListChar(uchar X, uchar Y, uchar code *DData)

功 能:向指定坐标中写入字符串(在DIPS082中运用此的函数)

说 明:X-横坐标,Y-纵坐标

进口参数:X,Y,*DData

返 回 值:无

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

//按指定方位显现一串字符 ***本来的遇到空格0x20就不显现***

void DisplayListChar(uchar X, uchar Y, uchar code *DData)

{

uchar ListLength,j;

ListLength = strlen(DData); // strlen:读取字符串的长度

Y &= 0x1;

X &= 0xF; // 约束X不能大于15,Y不能大于1

if (X <= 0x0F) // X坐标应小于0xF

{

for(j=0;j

{

DisplayOneChar(X, Y, DData[j]); // 显现单个字符

X++; // 横坐标加1,纵坐标不变

}

}

}

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

函 数 名:void Mychar()

功 能:自界说字符–CGRAM

说 明:LCM1602字符库中没有温度符号,自界说温度符号

进口参数:无

返 回 值:无

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

void Mychar(void)

{

//———自界说字符代码–00H——闹铃符号————-

WriteCommandLCM(0x40,1); //第1行

WriteDataLCM(0x01);//

WriteCommandLCM(0x41,1); //第2行

WriteDataLCM(0x1b);//

WriteCommandLCM(0x42,1); //第3行

WriteDataLCM(0x1d);//

WriteCommandLCM(0x43,1); //第4行

WriteDataLCM(0x19);//

WriteCommandLCM(0x44,1); //第5行

WriteDataLCM(0x1d);//

WriteCommandLCM(0x45,1); //第6行

WriteDataLCM(0x1b);//

WriteCommandLCM(0x46,1); //第7行

WriteDataLCM(0x01);//

WriteCommandLCM(0x47,1); //第8行

WriteDataLCM(0x00);//

//———自界说字符代码–01H——-温度符号————

WriteCommandLCM(0x48,1); //第1行

WriteDataLCM(0x02);//

WriteCommandLCM(0x49,1); //第2行

WriteDataLCM(0x05);//

WriteCommandLCM(0x4a,1); //第3行 1——**–

WriteDataLCM(0x05);// 2—-**–**

WriteCommandLCM(0x4b,1); //第4行 3—-**–**

WriteDataLCM(0x02);// 4——**–

WriteCommandLCM(0x4c,1); //第5行 5———-

WriteDataLCM(0x00);// 6———-

WriteCommandLCM(0x4d,1); //第6行 7———-

WriteDataLCM(0x00);// 8———-

WriteCommandLCM(0x4e,1); //第7行

WriteDataLCM(0x00);//

WriteCommandLCM(0x4f,1); //第8行

WriteDataLCM(0x00);//

//———自界说字符代码–02H——-当时时刻————

WriteCommandLCM(0x50,1); //第1行

WriteDataLCM(0x1f);//

WriteCommandLCM(0x51,1); //第2行

WriteDataLCM(0x11);//

WriteCommandLCM(0x52,1); //第3行

WriteDataLCM(0x15);//

WriteCommandLCM(0x53,1); //第4行

WriteDataLCM(0x11);//

WriteCommandLCM(0x54,1); //第5行

WriteDataLCM(0x1b);//

WriteCommandLCM(0x55,1); //第6行

WriteDataLCM(0x0a);//

WriteCommandLCM(0x56,1); //第7行

WriteDataLCM(0x1f);//

WriteCommandLCM(0x57,1); //第8行

WriteDataLCM(0x00);//

//———————————————–

}

#endif

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/266249.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部