51单片机液晶显示(含lcd12864和lcd1602)时钟_liutao2588的空间_...
【转】 51单片机液晶显示(含lcd12864和lcd1602)时钟
2010-06-05 01:05
转载自 nathen_zhang
最终编辑 nathen_zhang
/*
51mcu液晶时钟(ZYB-MCU51-LCD-A0)
通过一个跳线进行1602和12864之单进行切换
本单片机具有完整的时间初始化和时间日期调校功能。
设计制作:**********************
lcd12864部分还未完成,仅能显示欢迎信息。
*/
#include<reg52.h>
#include <math.h>
#include <intrins.h>  //使用 _nop_()将会用到此头文件
#define uchar unsigned char
字符串长度和字节#define uint unsigned int
#define uchar unsigned char
#define uint unsigned int
//跳线设置    1-2 则key=1(lcd12864)  2-3则key=0(lcd1602);
sbit key=P0^4;
//ds1302寄存器宏定义
#define WRITE_SECOND 0x80
#define WRITE_MINUTE 0x82
#define WRITE_HOUR  0x84
#define WRITE_DATE 0x86
#define WRITE_MONTH 0x88
#define WRITE_DAY  0x8A
#define WRITE_YEAR  0x8C
#define READ_SECOND  0x81
#define READ_MINUTE 0x83
#define READ_HOUR    0x85
#define READ_DATE  0x87
#define READ_MONTH 0x89
#define READ_DAY    0x8B
#define READ_YEAR  0x8D
#define WRITE_PROTECT 0x8E
#define uchar unsigned char
#define L1 0x80    // 液晶显示第一行起始地址 然后再加上所有位序号(从0开始)
#define L2 0xc0    //液晶显示第二行起始地址 0x80+0x40
#define DATA P3
#define pos_year  L1+0
#define pos_month L1+3
#define pos_date  L1+6
#define pos_day    L1+9
#define pos_hour  L2+0
#define pos_minute L2+3
#define pos_sec L2+6
//位寻址寄存器定义
sbit ACC_7 = ACC^7;
//管脚定义
sbit sclk=P0^2; // DS1302时钟信号 7脚
sbit clk_io=P0^1;    // DS1302数据信号  6脚
sbit clk_rst=P0^0;  // DS1302片选  5脚
sbit RS1602=P1^5;
sbit RW1602=P1^6;
sbit E1602=P1^7;
//功能按键定义
sbit func_key=P2^2;
sbit inc_key=P2^1;
sbit dec_key=P2^0;
//地址、数据发送子程序
void delay(uchar);
void write1602_comd(uchar);
void write1602_data(uchar);
void init1602_lcd();
void keyscan();
void Init_DS1302();   
void read_real_time();
uchar i,j,flag=0;
uchar code table1[]=" - - / ";
uchar code table2[]=" : : ";
//LCD12864相关函数
//数据线使用P3
#define DATA    P3 
//控制线使用P1
#define CONTROL P1
#define RS12864  0    //并行的指令数据选择信号
#define RW12864  1    //并行的读写信号     
#define E12864    2    //并行的使能信号 
#define PSB12864 3    //并/串行接口选择        12864 LCD分为字符型和点阵型,字符型即内带中文字库的有PSB串并选择引脚。
#define RST12864 5    //复位 低电平有效     
#define SETB(x,y) (x|=(1<<y))
#define CLRB(x,y) (x&=(~(1<<y)))
#define CHKB(x,y) (x&(1<<y))
void lcd12864_init(void);
void clr_lcd12864(void);
void send12864_com(unsigned char cmd);
void send12864_data(unsigned char dat);
void chek12864_busy(void);
void set12864_xy(unsigned char xpos,unsigned char ypos);
void print12864(unsigned char x,unsigned char y,char* str);
void print12864str(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。