c51语言 12864菜单设计 不带自库,12864显示花屏 - c51编程(单片机的c语言) - 51单片机学习论坛 www.51c51.com - Powered by Discuz!...

该博客介绍了如何使用C51语言在AT89C52单片机上实现12864液晶显示器、DS1302时钟和DS18B20温度传感器的集成应用。程序中包含了初始化设置、时间读写、温度显示等功能,并详细展示了各个模块的代码实现,包括数据传输、按键处理和时间设置等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

*描述:12864+ds1302+ds18b20                                              *

*硬件:AT89C52单片机,晶振为11.0592MHz,KS0108驱动的128*64液晶                   *

*      SPI总线的DS1302时钟,1-WIRE温度传感器DS18B20。      *

*作者:LO单片机VE                                                           *

*文件:12864.c                  *

*日期:2007-06-10                                                           *

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

*描述:                                                                     *

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

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

头文件区

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

#include

#include

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

内存区定义

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

sbit BF=P0^7; //12864

sbit DI=P2^0;

sbit RW=P2^1;

sbit ENABLE=P2^2;

sbit CS1=P2^3;

sbit CS2=P2^4;

sbit TIMECLK=P2^7; //DS1302

sbit TIMEDATA=P1^7;

sbit TIMERST=P1^6;

sbit K1=P1^2; //三个按键

sbit K2=P1^3;

sbit K3=P1^4;

sbit K4=P1^5;

sbit LN1=P3^2; //水位控制端口

//sbit LN2=P3^7;

sbit DQ=P3^6; //DS18b20*1

sbit HT=P3^4; //温度控制端口

sbit CR=P3^5;

sbit WT=P3^3;

sbit BUZZ=P3^7;//蜂鸣器

sbit BeiGuang=P2^6;//液晶背光控制

bit SCNF=1; //秒闪烁标志位

bit tempflag;  //温度标志位

#define INIT_SECOND 0x00  //年月日星期时间初始值

#define INIT_MINUTE 0x00

#define INIT_HOUR 0x00

#define INIT_DAY 0x01

#define INIT_MONTH 0x01

#define INIT_WEEK 0x01

#define INIT_YEAR 0x00

unsigned char data SECOND; //年月日星期时间

unsigned char data MINUTE;

unsigned char data HOUR;

unsigned char data DAY;

unsigned char data MONTH;

unsigned char data WEEK;

unsigned char data YEAR;

unsigned char count=10; //计数器记数值

unsigned char RF1; //一路闹钟

unsigned char RF2; //二路闹钟

unsigned char MF=0; //移位设置

unsigned char TMF=0;

unsigned char TPF=0;

unsigned char TRF=0;

unsigned char TN=0x60; //温度初始值

unsigned char n=0;  //音调

unsigned char year_lunar;

unsigned char month_lunar;

unsigned char day_lunar;

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

函数声明

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

void busyl(void);  //12864

void busyr(void);

void write_cmdl(unsigned char Commandaddr);

void write_datal(unsigned char Dataaddr);

void busyr(void);

void write_cmdr(unsigned char Commandaddr);

void write_datar(unsigned char Dataaddr);

void init_12864(void);

void clear(void);

void write_ascii(unsigned char x,unsigned char y,unsigned char time,bit fanhei);

void write_character(unsigned char x,unsigned char y,unsigned char *ptr,bit fanhei);

void write_week(unsigned char x,unsigned char y,unsigned char weektime,bit fanhei);

void write_ds1302(unsigned char Writeaddr,unsigned char Writedata); //DS1302

unsigned char read_ds1302(unsigned char Readaddr);

void init_ds1302(void);

void readtime(void);

bit reset_ds18b20(void);  //DS18B20

unsigned char ds18b20(void);

void write_ds18b20(unsigned char value);

unsigned char read_temp(void);

void keyscanf(void);  //按键

void tempdisplay(void);

void ringdisplay(void);

void keyscanf1(void);

void timereset(void);

void ringreset(void);

void tempreset(void);

unsigned char turntobcd(unsigned char x,unsigned char y,unsigned char value,signed char max,signed char min);

void sound(void);

void display1(void);

void display2(void);

void delayus(unsigned char i); //延时

void delayms(unsigned char j);

void delays(unsigned char k);

void initTimer0(void);

void Timer0(void);

void initTimer1(void);

void Timer1(void);

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

表格

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

unsigned char bcddis[6];

unsigned char code divdisplay[] =

{

0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,

0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09

};

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

ASCII字模的数据表

码表从0x20~0x7e

字库: D:\学习软件\单片机小软件\字模提取\Asc8X16E.dat 纵向取模下高位

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

unsigned char code nAsciiDot[] =              // ASCII

{

0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,  // -0-

0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,

0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,  // -1-

0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,

0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,  // -2-

0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,

0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,  // -3-

0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,

0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,  // -4-

0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,

0x7C,0x7C,0x44,0x44,0xC4,0xC4,0x84,0x00,  // -5-

0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,

0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,  // -6-

0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,  // -7-

0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,

0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,  // -8-

0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,  // -9-

0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -.-

0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,

0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,  // -:-

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

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // - -

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,  // ---

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

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

星期汉字字模表

星期汉字库: 宋体16.dot 纵向取模下高位,数据排列:从左到右从上到下

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

unsigned char code characterweek[] =                    // 数据表

{

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,// 一

0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,// 二

0x08,0x08,0x08,0x0C,0x08,0x00,0x00,0x00,

0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,

0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,

0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,// 三

0x84,0x84,0x84,0xC4,0x86,0x04,0x00,0x00,

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,

0x20,0x20,0x20,0x20,0x20,0x30,0x20,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值