LCD12864指针式模拟时钟(基于51)


#define LCD_data P0 //数据口
sbit LCD_RS = P2^6; //寄存器选择输入
sbit LCD_RW = P2^5; //液晶读/写控制
sbit LCD_EN = P2^7; //液晶使能控制
sbit LCD_PSB = P3^2; //串/并方式控制
sbit LCD_RST = P3^7; //液晶复位端口
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; void delay(int ms); //void delay1(int ms);//延时函数 void Delay_S(void); //延时 1s 误差 0us //bit lcd_busy();//lcd 测忙函数 //void lcd_wcmd(uchar cmd);//写命令函数 //void lcd_wdat(uchar dat);//写数据函数 //uchar lcd_rdat();//读数据函数 void lcd_init();//lcd 初始化函数 //void lcd_pos(uchar X,uchar Y);//确定坐标函数 //void lcdflag(); //闪烁函数 //void photodisplay(uchar *bmp);//显示图片函数*/ //void DrawPoint(unsigned char x,unsigned char y,unsigned char color);//打点函数 void line(unsigned char x0,unsigned char y0, unsigned char x1,unsigned char y1,unsigned char color);//画直线函数 //void rect(int x0, int y0, int x1, int y1); //画矩形函数 //void rectfill(int x0, int y0, int x1, int y1);//画实心矩形函数 void circle(int x1, int y1, unsigned int r);//画圆函数 //void circlefill(int x1, int y1, unsigned int r,unsigned char color);//画实心圆函数
/************************************************************
* 描述:
*
* 12864 标准字库液晶演示 数据 p0,控制 p2
*
************************************************************/
/*******************************************************************/
#ifndef LCD12864_BSP_H_ #define LCD12864_BSP_H_
#define uchar unsigned char #define uint unsigned int
#define pi 3.1412926
//定义π
/************* 12864LCD 引脚定义 *************/
void DISPd(char x0,char y0,char R,char Time,char step,char color);//画时钟指针函数 void clr_screen();//清屏函数
#endif
/**************************************************************************/ /********************第一版,功能正常,待修改完善**************************/ /********************作者:WHJWNAVY*************************************/ /********************QQ:805400349******************************************/ /********************请尊重作者劳动成果!**********************************/ /********************时间:2012.07.14***************************************/ /********************文件名:lcd12864_bsp.c*********************************/ /********************作用:相关函数定义及硬件驱动程序**********************/ /*************************************************************************/ #include <reg51.h> #include <intrins.h> #include<stdlib.h> #include<math.h> #include "lcd12864_bsp.h"
基于 51 单片机的 12864 指针式模拟时钟
效果图:
/****************************************************************************/ /******************第一版,功能正常,待修改完善******************************/ /******************作者:WHJWNAVY****************************************/ /******************QQ:805400349*********************************************/ /******************请尊重作者劳动成果!**************************************/ /******************时间:2012.07.14******************************************/ /*******************文件名:lcd12864_ZZZMB.c********************************/ /*******************作用:主函数,时间处理及指针显示*************************/ /****************************************************************************/
DrawHand(x0,y0,15,k,6,0);//消除原来的时针位置 k++; if(k==60)k=0; DrawHand(x0,y0,15,k,6,1);//显示新的时针位置 } } Delay_S(); //“一秒”的长度 DrawHand(x0,y0,25,i,6,0); // 消除秒针位置 if((i==j)||(i==k)||(j==k)) //处理指针相遇 { DrawHand(x0,y0,20,j,6,1); //显示分针 DrawHand(x0,y0,15,k,6,1); //显示时针 } } } }
i=0;j=0;k=45;
delay(100);
//上电,等待稳定
lcd_init();
//初始化 LCD
clr_screen(); //清屏 DISP_BP(); //画表盘 DrawHand(x0,y0,25,i,6,1); //显示秒针 DrawHand(x0,y0,20,j,6,1); //显示分针 DrawHand(x0,y0,15,k,6,1); //显示时针 while(1) { for(i=0;i<60;i++) //秒 {
/*********************************************************
*
*
* 主函数
*
*
*
*********************************************************/
void main()
{
uchar i,j,k;
DrawHand(x0,y0,25,i,6,1); //显示秒针位置 if(i==0) //分 { DrawHand(x0,y0,20,j,6,0); //消除原来分针位置 j++; if(j==60)j=0; DrawHand(x0,y0,20,j,6,1); //显示新的分针位置 if(((j+1)%12)==0) //时 {
/*************************************************************************/ /********************第一版,功能正常,待修改完善*************************/ /********************作者:WHJWNAVY***********************************/ /********************QQ:805400349****************************************/ /********************请尊重作者劳动成果!*********************************/ /*********************时间:2012.07.14*************************************/ /*********************文件名:lcd12864_bsp.h********************************/ /*********************作用:头文件,相关函数声明及硬件端口定义*************/ /**************************************************************************/
合集下载

基于51单片机的数码管时钟(带闹钟调时秒表)

基于51单片机的数码管时钟(带闹钟调时秒表)

基于51单片机的数码管时钟(带闹钟调时秒表)/**************************************************************** ************ ** *********************************************************** ** * * ** * * ** * 基于51单片机的数码管时钟程序* ** ** * * ** * * *********************************************************** ** ** ************************************************************ ****************/#include<stdio.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6; //申明u1锁存器的锁存端sbit wela=P2^7; //申明u2锁存器的锁存端sbit key1=P3^0; //功能键sbit key2=P3^1;//增大键sbit key3=P3^2;//减小键sbit key4=P3^3;//秒表查看键sbit beep=P2^3;//蜂鸣端uchar num,num1,num2,numm;uchar numf,num,nums,num;uchar s,s1,f,f1,m,m1;uchar ns,ns1,nf,nf1;uchar numns,numnf;uchar dingshi;void display(uchar m,uchar m1,ucharf,uchar f1,uchar s,uchar s1);void display1(uchar nf,uchar nf1,uchar ns,uchar ns1);void key();void key1();void alram();void di();void delayms(xms);void T0_time() interrupt 1;void miaobiao();uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x77,0x7c,0x39,0x5e,0x79,0x71};/*********************************************************主函数void main()*********************************************************/int main(){TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;EA=1;ET0=1;TR0=1;nums=12;numf=0;num2=0;num=0;while(1){if(dingshi==0){keyscan();display(m,m1,f,f1,s,s1);alarm();}else{miaobiao();keyscan1();display1(nf,nf1,ns,ns1);}}return 0;}/********************************************************* 蜂鸣器函数di()*********************************************************/ void di(){beep=0;delayms(100);beep=1;}/********************************************************** 按键调时函数key()**********************************************************/ void keyscan(){if(key1==0){delayms(10);display(m,m1,f,f1,s,s1);}}}/********************************************** 按键设定闹钟函数keyscan1();***********************************************/ void keyscan1(){if(key1==0){delayms(10);if(key1==0){ numns++;if(numns==24);numns=0;while(!key1);di();display1(nf,nf1,ns,ns1);}}if(key2==0){delayms(10);if(key2==0){ numnf++;if(numnf==24);numnf=0;while(!key2);di();display1(nf,nf1,ns,ns1);}}if(key3==0){delayms(10);if(key3==0){dingshi=0;while(!key1);di();display1(nf,nf1,ns,ns1);}}}/********************************************************* 闹钟函数alram()*********************************************************/ void alram(){if((nums==numns)&&(numnf==numf))beep=0;}/*********************************************************秒表函数miaobiao()*********************************************************/ void miaobiao(){if(key4==0){delayms(100);if(key4==0){while(!key4);di();displaym(uchar m,uchar m1);}}}/********************************************************* 正常显示函数display()*********************************************************/ void display(uchar m,uchar m1,ucharf,uchar f1,uchar s,uchar s1){dula=1;P0=table[m1]//秒位第1位dula=0;PO=0xff;// 送入位选信号前关闭所有显示,防止打开位选锁存时wela=1;P0=0xef;wela=0;delayms(10);dula=1;P0=table[m]; //秒第2位dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delayms(100)dula=1;P0=table[f1]; //分第1位dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delayms(100)dula=1;P0=table[f]; //分第2位dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delayms(10)dula=1;P0=table[s1]; //时第1位dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delayms(100)dula=1;P0=table[s]; //时第2位dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(10)}/********************************************************** ***调时闹钟显示函数display1()*********************************************************** **/void display1(uchar nf,uchar nf1,uchar ns,uchar ns1){nf1=numnf/10;nf=numnf%10;ns1=nums/10;ns=nums%10;dula=1;P0=table[nf1];//分第1位dula=0;P0=0xff;wela=1;P0=0xfb;//待改参数wela=0;delayms(10);dula=1;P0=table[nf];//分第2位dula=0;P0=0xff;wela=1;P0=0xf7;//待改参数wela=0;delayms(10);P0=table[ns1];//时第1位dula=0;P0=0xff;wela=1;P0=0xfe;//待改参数wela=0;delayms(10);dula=1;P0=table[ns];//时第2位dula=0;P0=0xfd;wela=1;P0=0xff;//待改参数wela=0;delayms(10);}/********************************************************** ***秒表显示函数displaym()*********************************************************** **/void displaym(uchar m,uchar m1){dula=1;P0=table[m1];//秒位第一位P0=0xff;wela=1;P0=0Xbf;wela=0;delayms(10);dula=1;P0=table[m];dula=0;P0=0xff;wela=1;P0=0X7f;wela=0;delayms(10);}/**************************************************** 中断服务函数void T0_time() interrupt 1****************************************************/ void T0_time() interrupt 1{TH0=(65536-45872)/256; //46080TL0=(65536-45872)%256;num2++;if(num2==20){num++;num2=0;m=num%10;m1=num/10;f=numf%10;f1=numf/10;s=nums%10;s1=nums/10;if(num==59){num=0;numf++;if(numf==59){numf=0;nums++;}if(nums==24)nums=0;}}}/*************************************************** 延时函数delayms()***************************************************/ void delayms(xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--); }。

电子信息工程专业毕业设计--基于51单片机的12864液晶显示器的设计和研究

电子信息工程专业毕业设计--基于51单片机的12864液晶显示器的设计和研究

目录设计总说明 (I)INTRODUCTION (II)1 绪论 (1)1.1课题背景及研究意义 (1)1.2课题研究的主要内容 (1)1.3国内外发展状况与存在问题 (1)2 总体方案设计与论述 (2)2.1 系统需求分析 (2)2.2 系统总体方案设计 (2)2.2.1 设计方案论证 (2)2.2.2总体结构框图 (3)3系统单元模块设计 (3)3.1系统硬件示意图 (3)3.2主控芯片(STC89C52模块)[5] (4)3.3 时钟控制模块[13] (6)3.3.1 DS1302简介 (6)3.3.2引脚及功能表 (7)3.3.3工作原理 (7)3.3.4 DS1302电路设计图[9] (8)3.4 温度控制模块 (8)3.5 12864接口电路模块 (9)3.6 按键电路模块 (9)3.7 电源电路模块 (10)3.8 印制电路板[9] (10)4系统整体调试与结果分析 (11)4.1 系统总体程序流程介绍 (11)4.2 按键程序设计 (13)4.3 12864驱动程序设计[15] (14)4.3.1 ST7920芯片介绍[14] (14)4.3.2 ST7920驱动程序设计 (17)4.4 12864应用程序设计 (20)4.4.1 文字显示程序设计 (20)4.4.2 点、线显示程序设计 (22)4.4.3 图形、图片显示程序设计 (23)4.5 菜单程序设计 (26)5设计调试及进一步研究 (28)5.1 系统测试 (28)5.1.1 软件调试 (28)5.1.2 硬件调试 (29)5.2 进一步研究的工作 (30)6总结 (30)鸣谢................................................................................................................................ 错误!未定义书签。

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。

本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。

51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。

本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。

本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。

接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。

将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。

软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。

本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。

通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。

2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。

它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。

51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。

51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。

其存储器分为程序存储器(ROM)和数据存储器(RAM)。

程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。

51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。

51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。

LCD12864可调电子钟.

LCD12864可调电子钟.

#include<reg51.h>#include"ziku.h"#define uchar unsigned char#define uint unsigned int/***************赋值************/#define lcd_on 0x3f //LCD开显示#define lcd_off 0x3e //LCD关显示#define lcd_row 0xc0 //LCD行初始化,共64行 #define lcd_col 0x40 //LCD列初始化,共64列 #define lcd_page 0xb8 //LCD页初始化,共8页 /**********定义变量*******/uchar a,b,c,h,m,s,yue,ri,xingqi;uint mun,nian,n;/*************定义LCD控制字*********/sbit lcd_cs1=P2^0; //LCD右屏sbit lcd_cs2=P2^1;sbit lcd_rs=P2^2;sbit lcd_rw=P2^3;sbit lcd_en=P2^4;sbit duan=P2^6; //LCD左屏 //LCD数据、指令寄存器 //LCD读、写操作 //LCD使能信号 //数码管段选择信号 sbit wei=P2^7; //数码管位选择信号 /*************定义按键************/sbit k1=P3^0;sbit k2=P3^1;sbit k3=P3^2;/***************************************************/ /*延时函数*/void delayms(uint z){int x,y;}/***************************************************/ /*定时器初始化*/ void timer_init(){TMOD=0x01; //选择定时器方式TH0=(65536-50000)/256; //设置定时时间为50ms}/***************************************************/ /*LCD选屏函数*/ void select_screen(uchar screen){switch(screen) { case 0: TL0=(65536-50000)%256; EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1; //启动定时器 for(x=z;x>0;x--) for(y=110;y>0;y--); //选择LCD全屏 lcd_cs1=0; lcd_cs2=0; break; //选择LCD左屏 case 1: lcd_cs1=0; lcd_cs2=1; break; case 2: //选择LCD右屏 lcd_cs1=1; lcd_cs2=0; break; }}/**************************************************/ /*LCD写指令函数*/ void write_com(uchar com){}/**************************************************/ /*LCD写数据函数*/ void write_date(uchar date){lcd_rw=0;} lcd_rs=1; P0=date; lcd_en=1; lcd_en=0; lcd_rw=0; lcd_rs=0; P0=com; lcd_en=1;lcd_en=0;/**************************************************/ /*LCD清屏函数*/ void clear_screen(uchar screen){int x,y; select_screen(screen); for(x=0xb8;x<0xc0;x++) { } write_com(x);write_com(lcd_col); for(y=0;y<64;y++) { } write_date(0x00);}/**************************************************//*LCD初始化*/void lcd_init(){duan=0;}/**************************************************//*年、月、日、星期、时间初始化*/void data_init(){}/**************************************************//*LCD显示汉字函数*/void lcd_display_hanzi(uchar screen,uchar row,uchar col,uint mun){ /*screen:选择屏幕参数,0:全屏、1:左屏、2:右屏。

时钟显示12864

时钟显示12864

主程序:#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#include<intrins.h>#include<math.h>#include<zhongduan.h>#include<ku.h>#define LCD_databus P0sbit sck=P1^0;sbit io=P1^1;sbit rst=P3^6;sbit RS=P2^2; //RS为0---命令;1----数据sbit RW=P2^1; //RW为1---写;0---读sbit EN=P2^0; //使能端sbit CS1=P2^4; //片选1低电平有效,控制左半屏sbit CS2=P2^3; //片选1低电平有效,控制右半屏sbit k1=P1^4;sbit k2=P1^5;sbit k3=P1^6;sbit k4=P1^7;uint t0,t1,t2,j0,j1,j2,shu=12,yue=7;void write_ds1302(uchar add,uchar dat);void write_ds1302_byte(uchar dat);uchar read_ds1302(uchar add);void set_rtc(void);void read_rtc(void);void time_pros(void);void display(void);uchar disp[20];uchar time_data[7]={12,6,7,27,12,3,3}; //设定起始时间uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//年周月天时分秒uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};void delay(uint z){uint x,y;for(x=110;x>0;x--)for(y=z;y>0;y--);}void Read_busy()//读“忙”函数-----数据线的最高位DB71则busy{P0=0x00;RS=0;RW=1;EN=1;while(P0 & 0x80);EN=0;}void write_LCD_command(uchar value) //写命令函数{Read_busy(); //对LCD的每次读写都要读忙RS=0; //选择命令RW=0; //读操作LCD_databus=value;EN=1; //EN由1----0锁存有效数据_nop_();_nop_();EN=0;}void write_LCD_data(uchar value)//写数据函数{Read_busy();RS=1; //选择数据RW=0;LCD_databus=value;EN=1; //EN由1----0锁存有效数据_nop_();_nop_();EN=0;}uchar Read_LCD(void) //读数据函数{uchar value;Read_busy();LCD_databus=0xFF; //先进行一次空读操作RS=1;RW=1;EN=1;_nop_();_nop_();EN=0;LCD_databus=0xFF; //读取真正的数据RS=1;RW=1;EN=1;value=LCD_databus;_nop_();_nop_();EN=0;return value;}void Set_page(uchar page) //设置“页”LCD12864共8页,一页是8行点阵点{page=0xb8|page; //页的首地址为0xB8write_LCD_command(page);}void Set_line(uchar startline) //设置显示的起始行{startline=0xC0|startline; //起始行地址为0xC0write_LCD_command(startline); //设置从哪行开始:共0--63;一般从0 行开始显示}void Set_column(uchar column) //设置显示的列{column=column &0x3f; //列的最大值为64column= 0x40|column; //列的首地址为0x40write_LCD_command(column); //规定显示的列的位置}void SetOnOff(uchar onoff) //显示开关函数:0x3E是关显示,0x3F是开显示{onoff=0x3e|onoff; //onoff:1---开显示;0---关显示write_LCD_command(onoff);}void SelectScreen(uchar screen) //选择屏幕{switch(screen){case 0: CS1=0;CS2=0;break; //全屏case 1: CS1=0;CS2=1;break;//左半屏case 2: CS1=1;CS2=0;break;//右半屏case 3: CS1=1;CS2=1;break;//无屏default:break;}}void ClearScreen(uchar screen) //清屏函数{uchar i,j;SelectScreen(screen); //0--全屏;1---左半屏;2---右半屏for(i=0;i<8;i++) //控制页数0-7,共8页{Set_page(i);Set_column(0);for(j=0;j<64;j++) //控制列数0-63,共64列{write_LCD_data(0x00); //写入0,地址指针自加1 }}}void InitLCD() //LCD的初始化{SetOnOff(1); //开显示SelectScreen(0);ClearScreen(0); //清屏Set_line(0); //开始行:0}void Display_SZ(uchar ss,uchar page,uchar column,uchar *p){uchar i;SelectScreen(ss);Set_page(page); //写上半页Set_column(column*8); //控制列for(i=0;i<8;i++) //控制8列的数据输出{write_LCD_data(p[i]); //汉字的上半部分}Set_page(page+1); //写下半页Set_column(column*8); //控制列for(i=0;i<8;i++) //控制8列的数据输出{write_LCD_data(p[i+8]); //汉字的下半部分}}void Display_HZ(uchar ss,uchar page,uchar column,uchar *p){uchar i;SelectScreen(ss);Set_page(page); //写上半页Set_column(column*16); //控制列for(i=0;i<16;i++) //控制16列的数据输出{write_LCD_data(p[i]); //汉字的上半部分}Set_page(page+1); //写下半页Set_column(column*16); //控制列for(i=0;i<16;i++) //控制16列的数据输出{write_LCD_data(p[i+16]); //汉字的下半部分}}void write_ds1302_byte(uchar dat){uchar i;for(i=0;i<8;i++){sck=0;io=dat&0x01;dat=dat>>1;sck=1;}}void write_ds1302(uchar add,uchar dat){rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);write_ds1302_byte(dat);rst=0;_nop_();io=1;sck=1;}uchar read_ds1302(uchar add){uchar i,value;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);for(i=0;i<8;i++){value=value>>1;sck=0;if(io)value=value|0x80;sck=1;}rst=0;_nop_();sck=0;_nop_();sck=1;io=1;return value;}void set_rtc(void){uchar i,j;Display_HZ(2,6,0,lin);Display_HZ(2,6,1,peng);for(i=0;i<7;i++){j=time_data[i]/10;time_data[i]=time_data[i]%10;time_data[i]=time_data[i]+j*16;}write_ds1302(0x8e,0x00);for(i=0;i<7;i++){write_ds1302(write_add[i],time_data[i]);}write_ds1302(0x8e,0x80);}void read_rtc(void){uchar i;for(i=0;i<7;i++){time_data[i]=read_ds1302(read_add[i]);}}void time_pros(void){disp[0]=time_data[6]%16; //秒disp[1]=time_data[6]/16;disp[2]=time_data[5]%16; //分disp[3]=time_data[5]/16;disp[4]=time_data[4]%16; //时disp[5]=time_data[4]/16;disp[6]=time_data[3]%16; //天disp[7]=time_data[3]/16;disp[8]=time_data[2]%16; //月disp[9]=time_data[2]/16;disp[10]=time_data[1]%16; //周disp[11]=time_data[1]/16;disp[12]=time_data[0]%16; //年disp[13]=time_data[0]/16;}void dingshi() interrupt 1{TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=0;t0=1;t1=1;t2=1;while(1){if(k1==0){delay(200);j1++;}if(j1==1)while(t1){switch(disp[12]) //年{case 0:Display_SZ(1,0,1,tiao_0);break;case 1:Display_SZ(1,0,1,tiao_1);break;case 2:Display_SZ(1,0,1,tiao_2);break;case 3:Display_SZ(1,0,1,tiao_3);break;case 4:Display_SZ(1,0,1,tiao_4);break;case 5:Display_SZ(1,0,1,tiao_5);break;case 6:Display_SZ(1,0,1,tiao_6);break;case 7:Display_SZ(1,0,1,tiao_7);break;case 8:Display_SZ(1,0,1,tiao_8);break;case 9:Display_SZ(1,0,1,tiao_9);break;}switch(disp[13]) //年{case 0:Display_SZ(1,0,0,tiao_0);break;case 1:Display_SZ(1,0,0,tiao_1);break;case 2:Display_SZ(1,0,0,tiao_2);break;case 3:Display_SZ(1,0,0,tiao_3);break;case 4:Display_SZ(1,0,0,tiao_4);break;case 5:Display_SZ(1,0,0,tiao_5);break;case 6:Display_SZ(1,0,0,tiao_6);break;case 7:Display_SZ(1,0,0,tiao_7);break;case 8:Display_SZ(1,0,0,tiao_8);break;case 9:Display_SZ(1,0,0,tiao_9);break;}if(k2==0){delay(180);shu++;j0=shu/10;time_data[0]=shu%10;time_data[0]=time_data[0]+j0*16;write_ds1302(0x8e,0x00);write_ds1302(write_add[0],time_data[0]);write_ds1302(0x8e,0x80);read_rtc();time_pros();switch(disp[12]) //年{case 0:Display_SZ(1,0,1,tiao_0);break;case 1:Display_SZ(1,0,1,tiao_1);break;case 2:Display_SZ(1,0,1,tiao_2);break;case 3:Display_SZ(1,0,1,tiao_3);break;case 4:Display_SZ(1,0,1,tiao_4);break;case 5:Display_SZ(1,0,1,tiao_5);break;case 6:Display_SZ(1,0,1,tiao_6);break;case 7:Display_SZ(1,0,1,tiao_7);break;case 8:Display_SZ(1,0,1,tiao_8);break;case 9:Display_SZ(1,0,1,tiao_9);break;}switch(disp[13]) //年{case 0:Display_SZ(1,0,0,tiao_0);break;case 1:Display_SZ(1,0,0,tiao_1);break;case 2:Display_SZ(1,0,0,tiao_2);break;case 3:Display_SZ(1,0,0,tiao_3);break;case 4:Display_SZ(1,0,0,tiao_4);break;case 5:Display_SZ(1,0,0,tiao_5);break;case 6:Display_SZ(1,0,0,tiao_6);break;case 7:Display_SZ(1,0,0,tiao_7);break;case 8:Display_SZ(1,0,0,tiao_8);break;case 9:Display_SZ(1,0,0,tiao_9);break;}}if(k3==0){delay(180);shu--;j0=shu/10;time_data[0]=shu%10;time_data[0]=time_data[0]+j0*16;write_ds1302(0x8e,0x00);write_ds1302(write_add[0],time_data[0]);write_ds1302(0x8e,0x80);read_rtc();time_pros();switch(disp[12]) //年{case 0:Display_SZ(1,0,1,tiao_0);break;case 1:Display_SZ(1,0,1,tiao_1);break;case 2:Display_SZ(1,0,1,tiao_2);break;case 3:Display_SZ(1,0,1,tiao_3);break;case 4:Display_SZ(1,0,1,tiao_4);break;case 5:Display_SZ(1,0,1,tiao_5);break;case 6:Display_SZ(1,0,1,tiao_6);break;case 7:Display_SZ(1,0,1,tiao_7);break;case 8:Display_SZ(1,0,1,tiao_8);break;case 9:Display_SZ(1,0,1,tiao_9);break;}switch(disp[13]) //年{case 0:Display_SZ(1,0,0,tiao_0);break;case 1:Display_SZ(1,0,0,tiao_1);break;case 2:Display_SZ(1,0,0,tiao_2);break;case 3:Display_SZ(1,0,0,tiao_3);break;case 4:Display_SZ(1,0,0,tiao_4);break;case 5:Display_SZ(1,0,0,tiao_5);break;case 6:Display_SZ(1,0,0,tiao_6);break;case 7:Display_SZ(1,0,0,tiao_7);break;case 8:Display_SZ(1,0,0,tiao_8);break;case 9:Display_SZ(1,0,0,tiao_9);break;}}if(k1==0){t1=0;delay(200);j1=2;}}if(j1==2)while(t2){switch(disp[8]) //月{case 0:Display_SZ(1,0,4,tiao_0);break;case 1:Display_SZ(1,0,4,tiao_1);break;case 2:Display_SZ(1,0,4,tiao_2);break;case 3:Display_SZ(1,0,4,tiao_3);break;case 4:Display_SZ(1,0,4,tiao_4);break;case 5:Display_SZ(1,0,4,tiao_5);break;case 6:Display_SZ(1,0,4,tiao_6);break;case 7:Display_SZ(1,0,4,tiao_7);break;case 8:Display_SZ(1,0,4,tiao_8);break;case 9:Display_SZ(1,0,4,tiao_9);break;}switch(disp[9]) //月{case 0:Display_SZ(1,0,3,tiao_0);break;case 1:Display_SZ(1,0,3,tiao_1);break;case 2:Display_SZ(1,0,3,tiao_2);break;case 3:Display_SZ(1,0,3,tiao_3);break;case 4:Display_SZ(1,0,3,tiao_4);break;case 5:Display_SZ(1,0,3,tiao_5);break;case 6:Display_SZ(1,0,3,tiao_6);break;case 7:Display_SZ(1,0,3,tiao_7);break;case 8:Display_SZ(1,0,3,tiao_8);break;case 9:Display_SZ(1,0,3,tiao_9);break;}switch(disp[12]) //年{case 0:Display_SZ(1,0,1,shu_0);break;case 1:Display_SZ(1,0,1,shu_1);break;case 2:Display_SZ(1,0,1,shu_2);break;case 3:Display_SZ(1,0,1,shu_3);break;case 4:Display_SZ(1,0,1,shu_4);break;case 5:Display_SZ(1,0,1,shu_5);break;case 6:Display_SZ(1,0,1,shu_6);break;case 7:Display_SZ(1,0,1,shu_7);break;case 8:Display_SZ(1,0,1,shu_8);break;case 9:Display_SZ(1,0,1,shu_9);break;}switch(disp[13]) //年{case 0:Display_SZ(1,0,0,shu_0);break;case 1:Display_SZ(1,0,0,shu_1);break;case 2:Display_SZ(1,0,0,shu_2);break;case 3:Display_SZ(1,0,0,shu_3);break;case 4:Display_SZ(1,0,0,shu_4);break;case 5:Display_SZ(1,0,0,shu_5);break;case 6:Display_SZ(1,0,0,shu_6);break;case 7:Display_SZ(1,0,0,shu_7);break;case 8:Display_SZ(1,0,0,shu_8);break;case 9:Display_SZ(1,0,0,shu_9);break;}if(k2==0){delay(180);yue++;j0=yue/10;time_data[2]=yue%10;time_data[2]=time_data[2]+j0*16;write_ds1302(0x8e,0x00);write_ds1302(write_add[2],time_data[2]);write_ds1302(0x8e,0x80);read_rtc();time_pros();switch(disp[8]) //月{case 0:Display_SZ(1,0,4,tiao_0);break;case 1:Display_SZ(1,0,4,tiao_1);break;case 2:Display_SZ(1,0,4,tiao_2);break;case 3:Display_SZ(1,0,4,tiao_3);break;case 4:Display_SZ(1,0,4,tiao_4);break;case 5:Display_SZ(1,0,4,tiao_5);break;case 6:Display_SZ(1,0,4,tiao_6);break;case 7:Display_SZ(1,0,4,tiao_7);break;case 8:Display_SZ(1,0,4,tiao_8);break;case 9:Display_SZ(1,0,4,tiao_9);break;}switch(disp[9]) //月{case 0:Display_SZ(1,0,3,tiao_0);break;case 1:Display_SZ(1,0,3,tiao_1);break;case 2:Display_SZ(1,0,3,tiao_2);break;case 3:Display_SZ(1,0,3,tiao_3);break;case 4:Display_SZ(1,0,3,tiao_4);break;case 5:Display_SZ(1,0,3,tiao_5);break;case 6:Display_SZ(1,0,3,tiao_6);break;case 7:Display_SZ(1,0,3,tiao_7);break;case 8:Display_SZ(1,0,3,tiao_8);break;case 9:Display_SZ(1,0,3,tiao_9);break;}}if(k3==0){delay(180);yue--;j0=yue/10;time_data[2]=yue%10;time_data[2]=time_data[2]+j0*16;write_ds1302(0x8e,0x00);write_ds1302(write_add[2],time_data[2]);write_ds1302(0x8e,0x80);read_rtc();time_pros();switch(disp[8]) //月{case 0:Display_SZ(1,0,4,tiao_0);break;case 1:Display_SZ(1,0,4,tiao_1);break;case 2:Display_SZ(1,0,4,tiao_2);break;case 3:Display_SZ(1,0,4,tiao_3);break;case 4:Display_SZ(1,0,4,tiao_4);break;case 5:Display_SZ(1,0,4,tiao_5);break;case 6:Display_SZ(1,0,4,tiao_6);break;case 7:Display_SZ(1,0,4,tiao_7);break;case 8:Display_SZ(1,0,4,tiao_8);break;case 9:Display_SZ(1,0,4,tiao_9);break;}switch(disp[9]) //月{case 0:Display_SZ(1,0,3,tiao_0);break;case 1:Display_SZ(1,0,3,tiao_1);break;case 2:Display_SZ(1,0,3,tiao_2);break;case 3:Display_SZ(1,0,3,tiao_3);break;case 4:Display_SZ(1,0,3,tiao_4);break;case 5:Display_SZ(1,0,3,tiao_5);break;case 6:Display_SZ(1,0,3,tiao_6);break;case 7:Display_SZ(1,0,3,tiao_7);break;case 8:Display_SZ(1,0,3,tiao_8);break;case 9:Display_SZ(1,0,3,tiao_9);break;}}if(k1==0){t2=0;delay(200);j1=3;}}if(j1==3)break;}}void main(){delay(200);TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;InitLCD(); //初始12864ClearScreen(0); //清屏Set_line(0);//set_rtc(); //设定起始时间Display_SZ(1,2,2,maohao);Display_SZ(1,2,5,maohao);Display_SZ(1,0,2,xie);Display_SZ(1,0,5,xie);Display_HZ(2,0,1,xing);Display_HZ(2,0,2,qi);while(1){read_rtc();time_pros();if(k1==0)TR0=1;switch(disp[0]) //秒{case 0:Display_SZ(1,2,7,shu_0);break;case 1:Display_SZ(1,2,7,shu_1);break;case 2:Display_SZ(1,2,7,shu_2);break;case 3:Display_SZ(1,2,7,shu_3);break;case 4:Display_SZ(1,2,7,shu_4);break;case 5:Display_SZ(1,2,7,shu_5);break;case 6:Display_SZ(1,2,7,shu_6);break;case 7:Display_SZ(1,2,7,shu_7);break;case 8:Display_SZ(1,2,7,shu_8);break;case 9:Display_SZ(1,2,7,shu_9);break;}switch(disp[1]) //秒{case 0:Display_SZ(1,2,6,shu_0);break;case 1:Display_SZ(1,2,6,shu_1);break;case 3:Display_SZ(1,2,6,shu_3);break;case 4:Display_SZ(1,2,6,shu_4);break;case 5:Display_SZ(1,2,6,shu_5);break;case 6:Display_SZ(1,2,6,shu_6);break;case 7:Display_SZ(1,2,6,shu_7);break;case 8:Display_SZ(1,2,6,shu_8);break;case 9:Display_SZ(1,2,6,shu_9);break;}switch(disp[2]) //分{case 0:Display_SZ(1,2,4,shu_0);break;case 1:Display_SZ(1,2,4,shu_1);break;case 2:Display_SZ(1,2,4,shu_2);break;case 3:Display_SZ(1,2,4,shu_3);break;case 4:Display_SZ(1,2,4,shu_4);break;case 5:Display_SZ(1,2,4,shu_5);break;case 6:Display_SZ(1,2,4,shu_6);break;case 7:Display_SZ(1,2,4,shu_7);break;case 8:Display_SZ(1,2,4,shu_8);break;case 9:Display_SZ(1,2,4,shu_9);break;}switch(disp[3]) //分{case 0:Display_SZ(1,2,3,shu_0);break;case 1:Display_SZ(1,2,3,shu_1);break;case 2:Display_SZ(1,2,3,shu_2);break;case 3:Display_SZ(1,2,3,shu_3);break;case 4:Display_SZ(1,2,3,shu_4);break;case 5:Display_SZ(1,2,3,shu_5);break;case 6:Display_SZ(1,2,3,shu_6);break;case 7:Display_SZ(1,2,3,shu_7);break;case 8:Display_SZ(1,2,3,shu_8);break;case 9:Display_SZ(1,2,3,shu_9);break;}switch(disp[4]) //时{case 0:Display_SZ(1,2,1,shu_0);break;case 1:Display_SZ(1,2,1,shu_1);break;case 2:Display_SZ(1,2,1,shu_2);break;case 3:Display_SZ(1,2,1,shu_3);break;case 4:Display_SZ(1,2,1,shu_4);break;case 5:Display_SZ(1,2,1,shu_5);break;case 6:Display_SZ(1,2,1,shu_6);break;case 8:Display_SZ(1,2,1,shu_8);break;case 9:Display_SZ(1,2,1,shu_9);break;}switch(disp[5]) //时{case 0:Display_SZ(1,2,0,shu_0);break;case 1:Display_SZ(1,2,0,shu_1);break;case 2:Display_SZ(1,2,0,shu_2);break;case 3:Display_SZ(1,2,0,shu_3);break;case 4:Display_SZ(1,2,0,shu_4);break;case 5:Display_SZ(1,2,0,shu_5);break;case 6:Display_SZ(1,2,0,shu_6);break;case 7:Display_SZ(1,2,0,shu_7);break;case 8:Display_SZ(1,2,0,shu_8);break;case 9:Display_SZ(1,2,0,shu_9);break;}switch(disp[12]) //年{case 0:Display_SZ(1,0,1,shu_0);break;case 1:Display_SZ(1,0,1,shu_1);break;case 2:Display_SZ(1,0,1,shu_2);break;case 3:Display_SZ(1,0,1,shu_3);break;case 4:Display_SZ(1,0,1,shu_4);break;case 5:Display_SZ(1,0,1,shu_5);break;case 6:Display_SZ(1,0,1,shu_6);break;case 7:Display_SZ(1,0,1,shu_7);break;case 8:Display_SZ(1,0,1,shu_8);break;case 9:Display_SZ(1,0,1,shu_9);break;}switch(disp[13]) //年{case 0:Display_SZ(1,0,0,shu_0);break;case 1:Display_SZ(1,0,0,shu_1);break;case 2:Display_SZ(1,0,0,shu_2);break;case 3:Display_SZ(1,0,0,shu_3);break;case 4:Display_SZ(1,0,0,shu_4);break;case 5:Display_SZ(1,0,0,shu_5);break;case 6:Display_SZ(1,0,0,shu_6);break;case 7:Display_SZ(1,0,0,shu_7);break;case 8:Display_SZ(1,0,0,shu_8);break;case 9:Display_SZ(1,0,0,shu_9);break;}switch(disp[8]) //月{case 0:Display_SZ(1,0,4,shu_0);break;case 1:Display_SZ(1,0,4,shu_1);break;case 2:Display_SZ(1,0,4,shu_2);break;case 3:Display_SZ(1,0,4,shu_3);break;case 4:Display_SZ(1,0,4,shu_4);break;case 5:Display_SZ(1,0,4,shu_5);break;case 6:Display_SZ(1,0,4,shu_6);break;case 7:Display_SZ(1,0,4,shu_7);break;case 8:Display_SZ(1,0,4,shu_8);break;case 9:Display_SZ(1,0,4,shu_9);break;}switch(disp[9]) //月{case 0:Display_SZ(1,0,3,shu_0);break;case 1:Display_SZ(1,0,3,shu_1);break;case 2:Display_SZ(1,0,3,shu_2);break;case 3:Display_SZ(1,0,3,shu_3);break;case 4:Display_SZ(1,0,3,shu_4);break;case 5:Display_SZ(1,0,3,shu_5);break;case 6:Display_SZ(1,0,3,shu_6);break;case 7:Display_SZ(1,0,3,shu_7);break;case 8:Display_SZ(1,0,3,shu_8);break;case 9:Display_SZ(1,0,3,shu_9);break;}switch(disp[6]) //天{case 0:Display_SZ(1,0,7,shu_0);break;case 1:Display_SZ(1,0,7,shu_1);break;case 2:Display_SZ(1,0,7,shu_2);break;case 3:Display_SZ(1,0,7,shu_3);break;case 4:Display_SZ(1,0,7,shu_4);break;case 5:Display_SZ(1,0,7,shu_5);break;case 6:Display_SZ(1,0,7,shu_6);break;case 7:Display_SZ(1,0,7,shu_7);break;case 8:Display_SZ(1,0,7,shu_8);break;case 9:Display_SZ(1,0,7,shu_9);break;}switch(disp[7]) //天{case 0:Display_SZ(1,0,6,shu_0);break;case 1:Display_SZ(1,0,6,shu_1);break;case 2:Display_SZ(1,0,6,shu_2);break;case 3:Display_SZ(1,0,6,shu_3);break;case 4:Display_SZ(1,0,6,shu_4);break;case 5:Display_SZ(1,0,6,shu_5);break;case 6:Display_SZ(1,0,6,shu_6);break;case 7:Display_SZ(1,0,6,shu_7);break;case 8:Display_SZ(1,0,6,shu_8);break;case 9:Display_SZ(1,0,6,shu_9);break;}switch(disp[10]){case 1:Display_HZ(2,0,3,yi);break;case 2:Display_HZ(2,0,3,er);break;case 3:Display_HZ(2,0,3,san);break;case 4:Display_HZ(2,0,3,si);break;case 5:Display_HZ(2,0,3,wu);break;case 6:Display_HZ(2,0,3,liu);break;case 7:Display_HZ(2,0,3,ri);break;}}}字库code char shu_0[]={/*-- 文字: 0 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00}; code char shu_1[]={/*-- 文字: 1 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00}; code char shu_2[]={/*-- 文字: 2 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00}; code char shu_3[]={/*-- 文字: 3 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00}; code char shu_4[]={/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00}; code char shu_5[]={/*-- 文字: 5 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00}; code char shu_7[]={/*-- 文字: 7 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00}; code char shu_8[]={/*-- 文字: 8 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00}; code char shu_9[]={/*-- 文字: 9 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}; code char lin[]={/*-- 文字: 林--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0x90,0xFF,0x90,0x10,0x00,0x10,0x10,0xD0,0xFF,0x90,0x10,0x10,0x10,0x00,0x08,0x06,0x01,0xFF,0x00,0x13,0x08,0x04,0x03,0x00,0xFF,0x01,0x06,0x18,0x08,0x00}; code char peng[]={/*-- 文字: 鹏--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x12,0xFE,0x00,0xFE,0x12,0xFE,0x00,0xFC,0x0E,0x35,0x44,0x7C,0x00,0x00,0x20,0x1F,0x21,0x7F,0x20,0x1F,0x41,0x7F,0x08,0x09,0x09,0x29,0x49,0x21,0x1F,0x00}; code char xing[]={/*-- 文字: 星--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00, 0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00}; code char qi[]={/*-- 文字: 期--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00}; code char yi[]={/*-- 文字: 一--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,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}; code char er[]={/*-- 文字: 二--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00}; code char san[]={/*-- 文字: 三--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00}; code char si[]={/*-- 文字: 四--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00};/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00}; code char liu[]={/*-- 文字: 六--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00}; code char ri[]={/*-- 文字: 日--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00}; code char maohao[]={/*-- 文字: : --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00}; code char xie[]={/*-- 文字: / --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00}; code char duo[]={/*-- 文字: 多--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x20,0x90,0x88,0x54,0x53,0xA2,0x22,0x12,0x0A,0x06,0x00,0x00,0x00,0x00,0x81,0x89,0x89,0x44,0x44,0x42,0x25,0x29,0x11,0x11,0x09,0x05,0x03,0x01,0x00}; code char yun[]={/*-- 文字: 云--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x40,0x44,0x44,0x44,0x44,0xC4,0xC4,0x44,0x44,0x46,0x46,0x64,0x60,0x40,0x00,0x00,0x20,0x70,0x38,0x2C,0x27,0x23,0x31,0x10,0x12,0x14,0x18,0x70,0x20,0x00,0x00}; code char qing[]={/*-- 文字: 晴--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFC,0x44,0x44,0xFC,0x20,0x22,0xAA,0xAA,0xBF,0xAA,0xAA,0xAA,0x22,0x20,0x00, 0x00,0x0F,0x04,0x04,0x0F,0x00,0x00,0xFF,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00}; code char tiao_0[]={/*-- 文字: 0 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0x1F,0xEF,0xF7,0xF7,0xEF,0x1F,0xFF,0xFF,0xF0,0xEF,0xDF,0xDF,0xEF,0xF0,0xFF}; code char tiao_1[]={/*-- 文字: 1 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0xEF,0xEF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xDF,0xC0,0xDF,0xDF,0xFF,0xFF}; code char tiao_2[]={/*-- 文字: 2 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0x8F,0xF7,0xF7,0xF7,0x77,0x8F,0xFF,0xFF,0xCF,0xD7,0xDB,0xDD,0xDE,0xCF,0xFF}; code char tiao_3[]={/*-- 文字: 3 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0xCF,0xF7,0x77,0x77,0xB7,0xCF,0xFF,0xFF,0xE7,0xDF,0xDF,0xDF,0xEE,0xF1,0xFF}; code char tiao_4[]={/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0xFF,0x3F,0xDF,0xEF,0x07,0xFF,0xFF,0xFF,0xF8,0xFB,0xDB,0xDB,0xC0,0xDB,0xFF}; code char tiao_5[]={/*-- 文字: 5 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0x07,0xF7,0x77,0x77,0xF7,0xF7,0xFF,0xFF,0xE6,0xDE,0xDF,0xDF,0xEE,0xF1,0xFF}; code char tiao_6[]={/*-- 文字: 6 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0x1F,0xEF,0x77,0x77,0xE7,0xFF,0xFF,0xFF,0xF0,0xEE,0xDF,0xDF,0xEE,0xF1,0xFF}; code char tiao_7[]={/*-- 文字: 7 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0xC7,0xF7,0xF7,0x37,0xC7,0xF7,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF}; code char tiao_8[]={/*-- 文字: 8 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0x8F,0x77,0xF7,0xF7,0x77,0x8F,0xFF,0xFF,0xE3,0xDD,0xDE,0xDE,0xDD,0xE3,0xFF}; code char tiao_9[]={/*-- 文字: 9 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xFF,0x1F,0xEF,0xF7,0xF7,0xEF,0x1F,0xFF,0xFF,0xFF,0xCE,0xDD,0xDD,0xEE,0xF0,0xFF};。

LCD12864显示实时时钟例程可运行

LCD12864显示实时时钟例程可运行

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

下面是一段12864液晶显示实时时钟的程序:/****************************************************************************** *********时间:2012.11.30晶振:11.0592MHz芯片:STC89C52RC功能描述:在12864上显示年、月、日、星期、时、分和秒等时间信息******************************************************************************* ********/#include<reg52.h>#define uchar unsigned charsbit CLK=P1^4; //DS1302引脚定义sbit IO=P1^5;sbit CE=P1^6;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit RS=P2^4; //12864引脚定义数据口为P0sbit RW=P2^5;sbit EN=P2^6;sbit PSB=P2^1;sbit RET=P2^3;void Input_1byte(uchar TD) //DS1302输入一字节数据{uchar i;ACC=TD;for(i=8;i>0;i--){IO=ACC0;CLK=1;CLK=0;ACC=ACC>>1;}}uchar Output_1byte(void) //DS1302输出一字节数据{uchar i;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=IO;CLK=1;CLK=0;}return(ACC);}void Write_DS1302(uchar add,uchar dat)//向DS1302写{CE=0;CLK=0;CE=1;Input_1byte(add);Input_1byte(dat);CE=0;}uchar Read_DS1302(uchar add) //从DS1302读{uchar inf; //信息临时存储变量CE=0;CLK=0;CE=1;Input_1byte(add);inf=Output_1byte();CE=0;return(inf);}/**********************DS1302初始化*****************************/void init_1302(){if(Read_DS1302(0xd1)==0x55) //判断内存单元的内容,是否进行初始化 {return;}else{Write_DS1302(0x8e,0x00); //关闭写保护Write_DS1302(0x90,0x00); //电池充电设置Write_DS1302(0x80,0x00); //秒Write_DS1302(0x82,0x54); //分Write_DS1302(0x84,0x20); //时Write_DS1302(0x86,0x30); //日Write_DS1302(0x88,0x11); //月Write_DS1302(0x8a,0x05); //星期Write_DS1302(0x8c,0x12); //年Write_DS1302(0xd0,0x55); //写RAMWrite_DS1302(0x8e,0x80); //打开写保护}}/**********************延时函数*****************************/ void DelayUs2x(unsigned char t){while(--t);}void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/**********************12864判忙*****************************/ void check_busy(){RS=0;RW=1;EN=1;while((P0&0x80)==0x80);EN=0;}/**********************12864写指令*****************************/ void write_com(uchar com){check_busy();RS=0;RW=0;EN=1;P0=com;DelayUs2x(250);EN=0;DelayUs2x(250);}/**********************12864写数据*****************************/void write_data(uchar dat){check_busy();RS=1;RW=0;EN=1;P0=dat;DelayUs2x(250);EN=0;DelayUs2x(250);}/**********************12864初始化函数*****************************/void init(){DelayMs(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式DelayMs(1); //延时RET=0; //复位DelayMs(1); //延时RET=1; //复位置高DelayMs(200);write_com(0x30); //选择基本指令集DelayUs2x(250); //延时大于100uswrite_com(0x30); //选择8bit数据流DelayUs2x(200); //延时大于37uswrite_com(0x0c); //开显示(无游标、不反白)DelayUs2x(250); //延时大于100uswrite_com(0x01); //清除显示,并且设定地址指针为00HDelayMs(200); //延时大于10mswrite_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动DelayUs2x(250); //延时大于100us}/**********************清屏*****************************/void clrscreen(){write_com(0x01);DelayMs(15);}/*********************************************************主函数********************************************************/void main(){uchar sec,sec1,sec2;uchar min,min1,min2;uchar hour,hour1,hour2;uchar date,date1,date2;uchar mon,mon1,mon2;uchar day;uchar year,year1,year2;uchar table1[]="年月日时分秒星期温度摄氏"; //长度24uchar table2[]={0XD2,0XBB, 0XB6,0XFE, 0XC8,0XFD, 0XCB,0XC4, 0XCE,0XE5, 0XCE,0XF9, 0XC8,0XD5}; //长度14 uchar table3[]="0123456789"; //长度10init(); //液晶初始化clrscreen();DelayMs(200);init_1302(); //1302初始化只初始化一下就可以需要下载两次DelayMs(50);write_com(0x80); //显示20write_data('2');write_data('0');write_com(0x82); //显示年write_data(table1[0]);write_data(table1[1]);write_com(0x84); //显示月write_data(table1[2]);write_data(table1[3]);write_com(0x86); //显示日write_data(table1[4]);write_data(table1[5]);write_com(0x91); //显示时write_data(table1[6]);write_data(table1[7]);write_com(0x93); //显示分write_data(table1[8]);write_data(table1[9]);write_com(0x95); //显示秒write_data(table1[10]);write_data(table1[11]);write_com(0x88); //显示星期write_data(table1[12]);write_data(table1[13]);write_data(table1[14]);write_data(table1[15]);while(1){sec=Read_DS1302(0x81); ////读秒sec1=sec&0x0f; //个位sec2=sec>>4; //十位min=Read_DS1302(0x83); ////读分min1=min&0x0f; //个位min2=min>>4; //十位hour=Read_DS1302(0x85); ////读时hour1=hour&0x0f; //个位hour2=hour>>4; //十位date=Read_DS1302(0x87); ////读日date1=date&0x0f; //个位date2=date>>4; //十位mon=Read_DS1302(0x89); ////读月mon1=mon&0x0f; //个位mon2=mon>>4; //十位year=Read_DS1302(0x8d); ////读年year1=year&0x0f; //个位year2=year>>4; //十位day=Read_DS1302(0x8b); ////读星期write_com(0x94); //送显示内容write_data(table3[sec2]); //秒write_data(table3[sec1]);write_com(0x92);write_data(table3[min2]); //分write_data(table3[min1]);write_com(0x90);write_data(table3[hour2]); //时write_data(table3[hour1]);write_com(0x85);write_data(table3[date2]); //日write_data(table3[date1]);write_com(0x83);write_data(table3[mon2]); //月write_data(table3[mon1]);write_com(0x81);write_data(table3[year2]); //年write_data(table3[year1]);write_com(0x8a);write_data(table2[2*day-2]); //星期write_data(table2[2*day-1]);}}。

基于51的电子闹钟设计报告(附原理图、PCB图、程序)

基于51的电⼦闹钟设计报告(附原理图、PCB图、程序)成都信息⼯程学院第五届嵌⼊式创新技术⼤赛基于MCS51的智能电⼦闹钟设计报告姓名学院班级实物图⽬录1.电⼦时钟的设计原理和⽅法 (1)1.1设计原理 (1)1.2 硬件电路的设计 (1)1.2.1 STC89C51RC简介 (1)1.2.2 键盘电路的设计 (2)1.2.3蜂鸣器驱动电路 (3)1.2.4 数码管驱动电路 (3)1.2.5 电源电路 (4)1.3软件部分的设计 (4)1.3.1主程序部分的设计 (4)1.3.2中断计时器及时间进位 (5)1.3.3 闹钟⼦函数 (7)1.3.4 按键扫描 (8)1.3.5 时钟闹钟设置 (9)1.3.6 显⽰数字函数 (10)1.3.7 显⽰界⾯函数 (10)1.3.8 闹钟记录及读取 (11)2.硬件调试 (13)附录A:电路原理图 (15)附录B:电路PCB图 (16)附录C:源程序 (17)1.电⼦时钟的设计原理和⽅法1.1设计原理系统框图1.2硬件电路的设计1.2.1 STC89C51RC简介STC89C52R CSTC89C51RC是⼀种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory )的低电压、⾼性能CMOS8位微型处理器,即单⽚机芯⽚。

单⽚机的可擦除只读存储器可以反复擦除1000次,内部FLASH 擦写次数为100000次以上。

该芯⽚使⽤⾼密度⾮易失存储制造技术,与⼯业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU 和闪烁存储器集成在单个芯⽚中,使得STC89C51RC 成为了⼀种性价⽐极⾼的微型处理器芯⽚,在许多电路设计中都得到了应⽤。

STC89C51RC 单⽚机特点:⼯作电压:5.5V-3.4V ⼯作频率:0-40MHz ⽤户应⽤程序空间:8K ⽚上集成128*8RAMISP (在系统可编程)/IAP (在应⽤可编程),⽆需专⽤编程器/仿真器可通过串⼝(P3.0/P3.1)直接下载⽤户程序EEPROM 功能共3个16位定时器/计数器,其中定时0还可以当成2个8位定时器使⽤外部中断4路通⽤异步串⾏⼝(UART ),还可⽤定时器软件实现多个UART ⼯作温度范围:0-75℃引脚说明:VCC:供电电压 GND :接地P0:P0是⼀个8位漏级开路双向I/O ⼝,低8位地址复⽤总线端⼝。

多功能电子钟毕业设计

多功能电子钟毕业设计本文主要介绍了一款多功能电子钟的设计方案,其中包括时钟、定时器、闹钟、日历、温度显示等多种功能。

通过硬件和软件的相结合,实现了这种多功能的电子钟,具有易操作、准确显示、功能多样等特点。

本设计可用于家庭、实验室、工作室等多种场合。

一、设计目标随着现代科技的发展,电子钟成为人们生活中不可缺少的一部分。

因此,本文设计了一款多功能电子钟,集时钟、定时器、闹钟、日历、温度显示等多种功能于一身,方便人们的日常生活。

二、设计原理该电子钟的各项功能均用单片机控制实现。

电子钟的控制部分是基于51单片机进行设计。

时钟的原理是通过一个晶振来控制芯片的工作频率,从而达到时钟的准确显示。

使用DS1302进行存储和控制时间。

定时器的原理是通过定时器中断进行实现,通过设定定时器的计数值即可实现定时器的功能。

闹钟的原理是通过设定一个“警报时间”来实现,当时间到达“警报时间”时,闹钟就会开始响铃。

日历的原理是通过读取DS1302中存储的日期信息进行实现。

温度显示的原理是通过使用DS18B20传感器实现对温度的检测。

三、硬件设计本设计的硬件主要由以下部分组成:显示部分、按键部分、计时器部分、DS1302时钟芯片、DS18B20温度传感器、单片机及其外设(如LCD12864液晶屏等)。

1.显示部分本设计采用LCD12864液晶屏进行显示。

2.按键部分本设计采用4个按键T1~T4,T1键用于切换时间制式;T2键用于设定时间和日期等;T3键用于设定闹钟;T4键用于定时器的设定。

3.计时器部分本设计采用计时器555进行固定时间的计时。

4. DS1302时钟芯片DS1302时钟芯片是一种用于实现实时时钟的芯片,本设计将其用于控制电子钟的时间。

5. DS18B20温度传感器DS18B20温度传感器是一种用于测量温度的芯片,本设计将其用于温度显示功能。

6. 单片机及其外设本设计采用AT89C52单片机进行控制,其外设包括LCD12864液晶屏、DS1302时钟芯片、DS18B20温度传感器等。

Protues中单片机驱动12864仿真

3.其次在“其他选项”中,选择如下:
4.上面设置好之后我们就可以在文字输入区输入汉字了,以“Ctrl”+“Enter”结束:
5.然后点击“C51格式”,在点阵生成区就会出现相应的模如下,我们可以把每个汉字对应的模存放在相应的数组中:
上面为取模软件的使用方法,下面开始正式教给读者单片机驱动lcd12864液晶显示屏的方法,在这之前,需要对无字库lcd12864液晶显示屏有个基础的了解,相关引脚如下:
void LCDWriteChineseBlack (char leftright, char page, char column, char chinese[]);//12864指定页指定列显示一个汉字,以黑色背景白色文本显示
void LCDWriteNum (char leftright, char page, char column, char num[]);//12864指定屏指定页指定列显示一个数字
void LCDDelay (char t)
{
char i, j;
for (i = 0; i < t; i ++ )
for (j = 0; j < 10 ;j ++ );
}
void CheckState ( )
{
char dat;
LCDRs = 0;
LCDRw = 1;
do
{
dat = 0x00;
LCDEn = 1;
参数leftright用来使能左半屏或者右半屏(‘L’或者’R’),
参数page用来选择在哪一页显示(0~7),
参数column用来选择在哪一列显示(0~64),
参数num[]即为待显示汉字的模。

51单片机LCD12864绘图

LCD12864绘图方法如下:一、绘图方法:1、使用扩展指令集并关闭绘图显示2、输入y轴坐标3、输入x轴坐标4、写入数据D15-D85、写入数据D7-D06、开绘图显示7、返回普通指令对应程序如下:LCD_write_comm(0x34);//使用扩充指令集LCD_delay();LCD_write_comm(0x80+y);//y坐标起始地址LCD_delay();LCD_write_comm(0x80+x);//x坐标起始地址LCD_delay();LCD_write_date(0x55);//写入数据D15-D8LCD_delay();LCD_write_date(0x55);//写入数据D7-D0LCD_delay();LCD_write_comm(0x36);//显示RAMLCD_delay();LCD_write_comm(0x30);//退出扩展指令集LCD_delay();程序执行效果则是第一行的第1-16个像素点会描出0x5555的二进制像素点,则后面的整个屏幕则是花屏,如果只想看到这0x5555,这几个像素点,则必须要给LCD的RAM重新赋值,也可以说是清屏,程序如下:void LCD12864_RAM_Cls(){u8 x,y;//xy坐标LCD_write_comm(0x34);//使用扩充指令集LCD_delay();for(y=0;y<32;y++){LCD_write_comm(0x80+y);//y坐标起始地址LCD_delay();LCD_write_comm(0x80);//x坐标起始地址LCD_delay();for(x=0;x<16;x++){LCD_write_date(0x00);LCD_delay();LCD_write_date(0x00);LCD_delay();}}LCD_write_comm(0x36);//显示RAMLCD_delay();LCD_write_comm(0x30);//退出扩展指令集LCD_delay();}二、坐标与显示X轴坐标设定初始值后会自动加1,取值范围0-15Y轴需要人为加1,取值范围为0-31整个屏幕分为上下屏,上屏对应坐标为x(0-7)y(0-31),下屏对应坐标为x(8-15)y(0-31)三、LCD12864图片显示代码1、Main.c#include"common.h"#include"delay.h"#include"12864.h"unsigned char code Picture[]= // 图片数据表{//此处添加图片取模16进制码共1024Byte,取模方式:从左到右从上到下0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x06,0x30,0x01,0xE0,0x00,0x00,0x2A,0x00,0x00,0xD8,0x00,0x00,0x00,0x00,0x01, 0x80,0x0F,0x7B,0x63,0xE0,0x00,0x00,0x22,0x00,0x01,0x24,0x00,0x00,0x00,0x00,0x01,0x80,0x0D,0xDB,0x63,0x01,0xBC,0x00,0x08,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x01, 0x80,0x0C,0x1B,0x63,0x07,0xB0,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x01, 0x80,0x0C,0x1B,0x63,0xED,0xB0,0xDB,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x01, 0x80,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x05,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0A,0x80,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x0A,0x00,0x00,0xFF,0xF8,0xE0,0x05,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x06,0xC0,0x15,0x00,0x1F,0xFF,0xFF,0xC0,0x02,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x09,0x20,0x11,0x00,0xFB,0xFF,0xE1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x08,0x20,0x0A,0x03,0x9F,0x00,0x9E,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x04,0x40,0x04,0x0E,0x70,0x00,0x81,0xC7,0x80,0x01,0x40,0x00,0x00,0x00,0x01, 0x80,0x02,0x80,0x00,0x1D,0x80,0x00,0xE0,0x61,0xE0,0x02,0xA0,0x00,0x00,0x00,0x01, 0xC0,0x01,0x00,0x00,0x77,0x9F,0xFC,0xF0,0x18,0xF8,0x02,0x20,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x01,0xDF,0x00,0x00,0xF3,0x0C,0x3C,0x01,0x40,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x03,0x9E,0x00,0x00,0xF8,0x06,0x1E,0x00,0x80,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0x83,0xC0,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x0F,0xFD,0xFF,0xFF,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x3F,0x81,0xFF,0x00,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0xFE,0xF0,0x00,0x00,0x01,0x00,0x00,0xC0,0x1C,0x00,0x00,0x00,0x00,0x01, 0x80,0x03,0xC0,0x07,0x80,0x00,0x03,0xE0,0x07,0x00,0x1C,0x00,0x00,0x00,0x00,0x01, 0x80,0x03,0x80,0x03,0x60,0x00,0x03,0xE0,0x0C,0x00,0x0E,0x00,0x00,0x00,0x00,0x01, 0x80,0x07,0x00,0x00,0xC0,0x00,0x00,0x20,0x18,0x00,0x07,0x00,0x00,0x00,0x00,0x01, 0x80,0x09,0x01,0x80,0x60,0x00,0x00,0x20,0x73,0x9F,0x03,0x80,0x00,0x00,0x00,0x01, 0x80,0x1E,0x0F,0xF2,0x20,0x00,0x00,0x20,0x67,0xFF,0xC1,0xC0,0x00,0x00,0x00,0x01, 0x80,0x1E,0x1F,0xF9,0x30,0x00,0x00,0x20,0xEF,0xFF,0xE0,0xE0,0x00,0x00,0x00,0x01, 0x80,0x38,0x3F,0xFC,0x90,0x00,0x00,0x20,0xCB,0xFF,0xF9,0xF0,0x00,0x00,0x00,0x01, 0x80,0x7F,0x7F,0xFE,0x10,0x00,0x00,0x20,0xDB,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x01, 0x80,0x6E,0xF9,0xBF,0x10,0x00,0x00,0x20,0xF7,0xED,0xFF,0xF0,0x00,0x00,0x00,0x01, 0x80,0x7C,0xFC,0x3F,0x10,0x00,0x00,0x20,0x67,0xE1,0xFD,0xE0,0x00,0x00,0x00,0x01, 0x80,0x7C,0xFC,0x3F,0x10,0x00,0x00,0x20,0x67,0xE1,0xFD,0xE0,0x00,0x00,0x00,0x01, 0x80,0x38,0xFC,0x3F,0x18,0x00,0x00,0x20,0x87,0xE0,0xFD,0xC0,0x00,0x00,0x00,0x01, 0x80,0x38,0xF1,0x8F,0x18,0x00,0x1F,0xE7,0x87,0x9C,0x7D,0xC0,0x00,0x00,0x00,0x01, 0x80,0x1C,0xFE,0x1F,0x81,0xFF,0xFF,0xC0,0x0F,0xE0,0xFF,0x80,0x00,0x00,0x00,0x01, 0x80,0x0C,0xFC,0x3F,0x80,0x00,0x00,0x00,0x0F,0xE1,0xF8,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0xF9,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEC,0xFE,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0xF9,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0xE0,0x00,0x00,0x00,0x60,0x00,0x00,0x01,0xC0,0x02,0x80,0x00,0x00,0x00,0x1C,0x01, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};void main(){LCD12864_init();//LCD初始化//LCD12864_RAM_Cls();LCD_Picture_show(Picture);while(1);}2、common.h#ifndef __COMMON_H#define __COMMON_H#include<STC12C5A60S2.h>#include "intrins.h"#define u8 unsigned char//无符号字符型#define u16 unsigned int//无符号整型#endif3、delay.h#ifndef __DELAY_H#define __DELAY_H#include "common.h"#define MAIN_Fosc 24000000L //定义主时钟void delay_ms(u16 ms);void LCD_delay();//LCD延时函数#endif4、delay.c#include "delay.h"//-------毫秒延时函数---------------void delay_ms(u16 ms){u16 i;do{i = MAIN_Fosc / 13000;while(--i) ; //14T per loop }while(--ms);}//------LCD延时函数-----------------void LCD_delay(void){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}5、12864.h#ifndef __12864_H#define __12864_h#include "common.h"sbit CS =P1^1;//片选sbit SID=P1^2;//数据口sbit CLK=P1^3;//同步时钟void LCD_write_spi(u8 date);//LCD SPI数据写入void LCD_write_comm(u8 comm);//LCD写指令void LCD_write_date(u8 date);//LCD写数据void LCD12864_init();//LCD初始化void LCD12864_RAM_Cls();//RAM清屏void LCD_print(u8 *date);//LCD字符串显示void LCD_Picture_show(u8 *date);#endif6、12864.c#include"common.h"#include"delay.h"#include"12864.h"//------LCD SPI数据写入--------------------void LCD_write_spi(u8 date){u8 i;for(i=0;i<8;i++){CS=1;if(date&0x80){SID=1;}else{SID=0;}date <<= 1;CLK=1;LCD_delay();CLK=0;}}//------LCD写指令--------------------void LCD_write_comm(u8 comm){u8 date = 0xf8;//串行写入指令到LCD(数据手册)u8 comm_H = comm&0xf0;u8 comm_L = comm<<4;CS =0;CLK=0;SID=0;LCD_delay();LCD_write_spi(date);LCD_write_spi(comm_H);LCD_write_spi(comm_L);CS=0;}//------LCD写数据-----------------------void LCD_write_date(u8 date){u8 date2 = 0xfa;//串行写入指令到LCD(数据手册)u8 date_H = date&0xf0;u8 date_L = date<<4;CS =0;CLK=0;SID=0;LCD_delay();LCD_write_spi(date2);LCD_write_spi(date_H);LCD_write_spi(date_L);CS=0;}//-----LCD初始化--------------------------void LCD12864_init(){LCD_write_comm(0x01);//清屏幕delay_ms(1);LCD_write_comm(0x0c);//开显示,游标显示关闭LCD_delay();LCD_write_comm(0x81);//设定坐标LCD_delay();}//-----写RAM清屏--------------------------void LCD12864_RAM_Cls(){u8 x,y;//xy坐标LCD_write_comm(0x34);//使用扩充指令集LCD_delay();for(y=0;y<32;y++){LCD_write_comm(0x80+y);//y坐标起始地址LCD_delay();LCD_write_comm(0x80);//x坐标起始地址LCD_delay();for(x=0;x<16;x++){LCD_write_date(0x00);LCD_delay();LCD_write_date(0x00);LCD_delay();}}LCD_write_comm(0x36);//显示RAMLCD_delay();LCD_write_comm(0x30);//退出扩展指令集LCD_delay();}//----LCD字符串显示-----------------------void LCD_print(u8 *date){u8 j=0;while(date[j]!='\0'){LCD_write_date(date[j]);j++;LCD_delay();}}//----图片显示-----------------------------void LCD_Picture_show(u8 *date){u8 x,y;//xy坐标LCD_write_comm(0x34);//使用扩充指令集LCD_delay();for(y=0;y<32;y++){LCD_write_comm(0x80+y);//y坐标起始地址LCD_delay();LCD_write_comm(0x80);//x坐标起始地址LCD_delay();for(x=0;x<8;x++)//写上半屏幕{LCD_write_date(date[16*y+x*2]);LCD_delay();LCD_write_date(date[16*y+x*2+1]);LCD_delay();}for(x=0;x<8;x++)//写下半屏幕{LCD_write_date(date[16*(y+32)+x*2]);LCD_delay();LCD_write_date(date[16*(y+32)+x*2+1]);LCD_delay();}}LCD_write_comm(0x36);//显示RAMLCD_delay();LCD_write_comm(0x30);//退出扩展指令集LCD_delay();}四、程序执行效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档