倒计时LCD显示程序
59分59秒倒计时程序及仿真显示
一、59分59秒倒计时程序:/*倒计时及显示程序,适用于寻迹小车实验板*/#include<>#define uchar unsigned char#define uint unsigned intuchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳七段编码uchar temp=0;//定义定时器溢出计数变量,每隔50ms产生1次溢出,temp加1/*uint time=5959;//定义倒计时变量,当temp计数加20(20x50ms=1s)时,time减1 */uchar miao=59;uchar fen=59;sbit P0_7=P0^7 ;/*--定时计数器T0及其中断初始化函数--*/void timer0init(void){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位初值EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0}/*----------延时函数---------------*/void delay(uint n){uint i,j;for(i=n;i>0;i--)for(j=124;j>0;j--);}/*定时计数器中断程序,每当定时计数器溢出时触发中断,执行该程序*/void time0() interrupt 1{TH0=(65536-50000)/256;//重装初值TL0=(65536-50000)%256;if(temp==20){temp=0;if(miao==0){miao=59;if(fen==0) fen=59;else fen--;}else miao--;}else temp++;}/*--------------显示函数------------*/void display(void){P1=0xfe;//输出个位的位码P0=table[miao%10]; //输出时间个位的段码delay(5); //亮5msP1=0xfd;//输出十位的位码P0=table[miao/10]; //输出时间十位的段码delay(5); //亮5msP1=0xfb;P0=table[fen%10];P0_7=0;delay(5);P1=0xf7;P0=table[fen/10];delay(5);}/*----------主函数-----------------*/void main(void){timer0init();//调用初始化函数对定时计数器进行初始化while(1){display();//调用显示函数显示时间}}二、仿真电路及显示图:。
单片机LCD1602A秒表程序
ORG 0030H
MAIN:
ACALL SET_LCD
;LCD 初始化设置子程序
TOOP:
ACALL WR_THL ACALL RESET_18B20
;将报警上下线写入暂存寄存器 ;18B20 复位子程序
JNB FLAG,TOOP1
;18B20 不存在
ACALL MEU_OK
;显示"OK"菜单
ACALL RE_THL
6
嵌入式应用软件园,版权所有,请勿转载/销售。
第 2 章 程序功能
1.1 程序功能 程序中包含 LCM 用到的所有函数:初始化、写指令、写数据、判
忙碌、清屏幕。 在单片机的 P1 端口上接有 LCD 模块,用来显示计时时间。P3.3、
P3.4 端口分别接有按键 K1、K2,做秒表的计时控制按钮。 K1:暂停和起动秒表。只能暂停和起动二次。 K2:重新开始计时,计时值从 0 开始。
1.2 操作方法 1. 按一下 K2 键,准备计时。 2. 按一下 K1 键,计时开始。 3. 按一下 K1 键,暂停计时。 4. 按一下 K1 键,计时开始,在第 2 步的基础上累计时。 5. 按一下 K1 键,暂停计时。 6. 重复第 1~5 步,循环使用秒表。
7
1.3 原理图
嵌入式应用软件园,版权所有,请勿转载/销售。
MOV A,#0CCH
;跳过 ROM 匹配
ACALL WRITE_18B20
;调写入子程序
MOV A,#44H
;发出温度转换命令
ACALL WRITE_18B20
;调写入子程序
ACALL RESET_18B20
;调复位子程序
MOV A,#0CCH
;跳过 ROM 匹配
lcd倒计时
淮阴师范学院物理与电子电气工程学院课程设计报告学生姓名石伟学号171108025 班级1108专业电气工程及其自动化题目LCD1602显示数字倒计时器的设计指导教师魏东旭、周凯杰2013 年12 月1 任务和设计要求基于AT89C52单片机的LCD1602数字倒计时器。
功能如下:⑴LCD1602显示倒计时时间。
⑵倒计时过程中能设置闹钟,当到达闹钟时间时会发出报警。
⑶通过按键能对倒计时设定初值。
2 系统设计系统框图3 硬件设计3.1 电路原理图3.2 主要单元电路LCD电路图蜂鸣器电路独立键盘电路复位电路3.3 元件清单4 软件设计4.1 程序流程图4.2 主要功能程序设计void time() interrupt 1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;count++;if (count==200)count=0;miao--;if(miao==-1){miao=59;fen--;if(fen==-1){fen=59;shi--;if(shi==-1){shi=23;}}}}}4.3 程序清单#include <reg52.h>#define uchar unsigned charsbit beep=P2^3;sbit key1=P3^4;sbit key2=P3^5;sbit key3=P3^6;sbit key4=P3^7;sbit lcdrs=P2^0;sbit lcden=P2^1;uchar num,m,n;int miao,fen,shi,count,nn,keyon,alarm,exit;uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; void delay(uchar x);uchar scan();void display1();void display2();void lcdwritecom(uchar);void lcdwritedata(uchar);void init();{alarm=0;exit=0;m=0;n=0;EA=1;ET0=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;miao=10;fen=10;shi=8;while(1){init();nn=scan();if(keyon){switch(nn){case 1:if(alarm){m++;if(m==24)m=0;}if(!alarm){shi++;if(shi==24)shi=0;miao=59;}keyon=0;break;case 2:if(alarm){n++;if(n==60)n=0;}if(!alarm){fen++;if(fen==60)fen=0;miao=59;}keyon=0;break;case 3:alarm=1;keyon=0;break;case 4:exit=1;alarm=0;keyon=0;break;}}if(alarm){display2();}if(!alarm){display1();}if(exit){if(shi==m&fen==n&miao==0){beep=0;}if(shi==m&fen==n-1&miao==50){beep=1;exit=0;}}}}void time() interrupt 1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;count++;if (count==200){count=0;miao--;if(miao==-1){miao=59;fen--;if(fen==-1){fen=59;shi--;if(shi==-1){shi=23;}}}}void delay(uchar x){uchar m,n;for(m=x;m>0;m--)for(n=100;n>0;n--); }uchar scan(){keyon=0;if(key1==0){delay(50);if(key1==0){keyon=1;num=1;}while(!key1);delay(10);while(!key1);}if(key2==0){delay(50);if(key2==0){keyon=1;num=2;}while(!key2);delay(5);while(!key2);if(key3==0){delay(50);if(key3==0){keyon=1;num=3;}while(!key3);delay(5);while(!key3);}if(key4==0){delay(50);if(key4==0){keyon=1;num=4;}while(!key4);delay(5);while(!key4);}return num;}void writecom(uchar com) {lcdrs=0;lcden=0;P0=com;lcden=1;delay(10);lcden=0;}void writedata(uchar date){lcdrs=1;lcden=0;P0=date;lcden=1;delay(10);lcden=0;}void init(){lcden=0;writecom(0x38);writecom(0x0c);writecom(0x06);writecom(0x80);}void display1(){writedata(table[shi/10]);writedata(table[shi%10]);writedata(0x3a);writedata(table[fen/10]);writedata(table[fen%10]);writedata(0x3a);writedata(table[miao/10]);writedata(table[miao%10]); }void display2(){writedata(table[m/10]);writedata(table[m%10]);writedata(0x3a);writedata(table[n/10]);writedata(table[n%10]);writedata(0x3a);writedata(table[0]);writedata(table[0]);}5 系统仿真及调试5.1 仿真原理图5.3 仿真结果及分析Key1表示设置时钟初始值的时或闹钟的时;Key2表示设置时钟初始值的分或闹钟的分;Key3表示进入设置闹钟时间;Key4表示退出设置闹钟时间;复位键按下回到程序初始。
LCD显示的定时闹钟设计方案
LCD显示的定时闹钟设计方案1.设计要求使用AT89C51单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD 时钟,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。
定时闹钟的基本功能如下:显示格式为“时时:分分”。
由LED闪动来做秒计数表示。
一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。
程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“ 00:00”,按下操作键K1〜K4动作如下:(1)K1 —设置现在的时间。
(2)K2 —显示闹钟设置的时间。
(3)K3 —设置闹铃的时间。
⑷K4 —闹铃ON/OFF勺状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。
设置当前时间或闹铃时间如下。
(1)K1 —时调整。
(2)K2 —分调整。
(3)K3 —设置完成。
(4)K4 —闹铃时间到时,发出一阵声响,按下本键可以停止声响。
本项目的难点在于4 个按键每个都具有两个功能,以最终实现菜单化的输入功能。
采用通过逐层嵌套的循环扫描,实现嵌套式的键盘输入。
2.设计方案2.1 原理本LCD定时闹钟,是以单片机及外围接口电路为核心硬件,辅以其他外围硬件电路,用汇编语言设计的程序来实现的。
根据C51单片机的外围接口特点扩展相应的硬件电路,然后根据单片机的指令设计出数字钟相应的软件,再利用软件执行一定的程序来实现数字钟的功能。
由于采用集成芯片性的单片机来制作电子钟,这样设计制作简单而且功能多、精确度高,也可方便扩充其他功能,实现也十分简单。
本设计是利用AT89C51单片机为主控芯片,由LCD晶振、电阻、电容、发光二极管、开关、喇叭等元件组成硬件电路,通过编写软件程序来实现和控制的数字定时闹钟2.2系统总框图2.3原理及工作过程说明(1)定时闹钟的基本功能如下:(a)启动仿真软件,使用LCD液晶显示器来显示现在的时间。
(b)程序执行之后显示“ 00:00”并且LED闪烁,表示开始已经计时。
PIC单片机课程设计-三位倒计时器(含全部汇编程序清单)
主循环程序:循环读取按键状 态,根据按键状态执行相应的 操作
初始化程序:设置定时器、 中断、I/O口等
定时器中断服务程序:定时器 中断发生时,更新倒计时值,
并判断倒计时是否结束
显示程序:根据倒计时值, 更新LED显示内容
错误处理程序:处理可能出现 的错误,如按键错误、定时器
错误等
初始化显示模块: 设置显示模式、亮 度、对比度等参数
电源模块的设计原 则:安全、稳定、 高效
电源模块的选型: 根据系统需求选择 合适的电源模块
初始化:设置定时器、中断、I/O口等 循环:循环读取定时器值,判断是否达到预设时间 显示:根据定时器值,更新显示内容 处理中断:处理定时器中断,更新定时器值 循环结束:当定时器值达到预设时间,循环结束,显示“时间到”信息
添加标题
设计思路:根据输入信号的类型和 数量,选择合适的输入接口和处理 方式
注意事项:确保输入信号的稳定性 和准确性,避免误操作或干扰导致 的错误输入
中断源:外部中断、定时器中断、串口中断等 中断优先级:根据需求设置中断优先级 中断处理:根据中断源执行相应的处理程序 中断返回:处理完成后返回主程序或等待下一个中断
调试方法:单步 调试、断点调试、 观察变量等
常见问题:程序 运行异常、死机、 数据错误等
调试技巧:设置 合理的断点、观 察变量变化、分 析程序逻辑等
测试功能:倒计时 功能、显示功能、 报警功能等
测试方法:手动测 试、自动测试、压 力测试等
测试工具:示波器 、逻辑分析仪、万 用表等
测试结果:记录测 试数据,分析测试 结果,找出问题并 解决
测试目的:验证倒计时器的性 能和稳定性
测试环境:实验室环境或实际 应用环境
倒计时系统设计
河南农业职业学院专科毕业设计(论文)题目倒计时系统设计学生姓名专业班级所在系指导教师倒计时系统设计摘要:本论文针对倒计时系统的设计的需求,介绍了MCS-51单片机的部分基本原理,如51单片机的接口功能、中断、定时器等等。
倒计时系统需要用到锁存器、矩阵键盘、LED数码显示器等主要模块,通过不同的模块之间相互作用,完成倒计时的初步硬件结构。
对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即采用Keil uVision3软件程序进行译码。
关键词:倒计时器/单片机/矩阵键盘/Keil uVision3/LED数码显示器THE DESIGN OF COUNTDOWN SYSTEMABSTRACT:This paper focuses on the needs of the countdown system design, introduced the MCS-51 MCU of some of the basic principles.Such as the 51 single-chip interface functions, interrupt, timer and so on. Countdown system needs to use latch, matrix keyboard, LED digital display and other major modules, through interaction between different modules to complete the Countdown to the initial hardware. The countdown device in the LED digital display, In order to simplify the circuit, reduce costs, we adopt a software-based interface method, namely using Keil uVision3 software program for decoding.KEYWORDS:Counter-down,SCM,Matrix keyboard,Keil uVision3,LED digital display目录中文摘要 (II)英文摘要 (III)目录 (III)第一章引言 (2)1.1 课题开发的作用及意义................................. - 0 -1.2 发展方向............................................. - 0 - 第二章原理设计 ................................................ - 2 -2.1 设计任务与要求....................................... - 2 -2.2 方案设计与论证....................................... - 2 -2.3 系统框图............................................. - 2 - 第三章器件的选择及介绍........................................ - 4 -3.1 单片机AT89S51 ......................................... - 4 -3.1.1 主要功能特性 ..................................... - 4 -3.1.2 AT89S51的引脚说明................................ - 4 -3.1.3 单片机定时器的使用 ............................... - 7 -3.2 显示器件选择........................................... - 7 - 第四章硬件电路的设计......................................... - 10 - 第五章各部分电路介绍......................................... - 11 -5.1 复位电路.............................................. - 11 -5.2 时钟电路.............................................. - 12 -5.3 按键电路.............................................. - 13 -5.4 蜂鸣器电路............................................ - 13 -5.5 数码管显示电路........................................ - 14 - 第六章软件设计与流程图....................................... - 16 -6.1 倒计时器主程序流程图................................ - 16 -6.2 定时器0的中断程序流程图............................ - 17 -6.3 定时器1的中断程序流程图............................ - 18 - 第七章 PCB制板图及仿真图...................................... - 20 -7.1 PCB制板图 ............................................ - 20 -7.2 整体电路仿真图以及仿真结果分析........................ - 21 - 第八章安装与调试 ............................................. - 23 -8.1 电路安装.............................................. - 23 -8.2 电路调试.............................................. - 23 -8.3 性能测试与分析........................................ - 23 - 结束语 ........................................................ - 24 - 致谢 ........................................................ - 25 - 参考文献 ...................................................... - 26 - 附录 ........................................................ - 27 -第一章引言1.1课题开发的作用及意义随着社会的发展人们对时间的要求越来越精确,而倒计时的应用也越来越广泛比如;奥运会开幕式的倒计时,篮球比赛的倒计时器,还有爆破时用的倒计时器等等。
24秒倒计时器的设计和制作
24秒倒计时器的设计和制作设计和制作一个24秒倒计时器可以分为硬件设计和软件设计两个部分。
硬件设计:1. 选择一个适合的开发板或者单片机作为控制器。
常见的选择有Arduino、Raspberry Pi等。
2.连接一个LCD显示屏,用于显示倒计时的时间。
3.连接一个按钮,用于启动倒计时。
4.使用一个蜂鸣器或者其他声音装置,用于倒计时结束时发出提示音。
软件设计:1. 在选定的控制器上,使用相应的开发环境进行编程。
例如使用Arduino IDE进行Arduino编程。
2.编写倒计时函数,用于倒计时的逻辑。
3.编写LCD显示函数,用于在LCD上显示倒计时的时间。
4.编写按钮检测函数,用于检测按钮的按下事件。
5.编写蜂鸣器控制函数,用于在倒计时结束时发出提示音。
下面是一个简单的伪代码示例,展示了如何实现一个24秒倒计时器:```cpp#include <LiquidCrystal.h> // 引入LCD库LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // 初始化LCD引脚const int buttonPin = 6; // 按钮引脚const int buzzerPin = 7; // 蜂鸣器引脚int buttonState = 0; // 按钮状态int countdownTime = 24; // 倒计时时间void setulcd.begin(16, 2); // 设置LCD行数和列数pinMode(buttonPin, INPUT); // 设置按钮引脚为输入pinMode(buzzerPin, OUTPUT); // 设置蜂鸣器引脚为输出void loobuttonState = digitalRead(buttonPin); // 读取按钮状态if (countdownTime > 0 && buttonState == HIGH) countdownTime--; // 倒计时减1秒displayTime(countdownTime); // 显示倒计时时间delay(1000); // 延迟1秒}if (countdownTime == 0)tone(buzzerPin, 1000, 500); // 发出提示音digitalWrite(buzzerPin, LOW); // 停止提示音delay(1000); // 延迟1秒countdownTime = 24; // 重置倒计时时间}lcd.setCursor(0, 0); // 设置LCD光标位置为第一行第一列lcd.print("Countdown: "); // 显示文本```这个示例使用了Arduino控制器和连接了16x2 LCD显示屏展示倒计时时间。
12864LCD显示倒计时程序
简介:第一行显示,距离系统爆炸时间第二行显示,还剩第三行显示,00时,00分,00秒第四行显示,周林按下旋钮开关,开始设定秒,秒编辑位闪动。
左右旋转设定数值,在按下开关,秒确定,设定分,分编辑位闪动左右调数值,再按下,分确定,小时位闪动。
左右转调小时,再按一下。
时间确定,开始倒计时。
到达定时时间后停止,并闪动。
#include <reg52.h>#include <intrins.h>/********************* 定义********************************/#define LCD_data P0 //数据口sbit LCD_RS = P2 ^ 0; //寄存器选择输入sbit LCD_RW = P2 ^ 1; //液晶读/写控制sbit LCD_EN = P2 ^ 2; //液晶使能控制sbit LCD_PSB = P2 ^ 3; //串/并方式控制sbit LCD_RST = P2 ^ 5; //液晶复位端口sbit sset=P3^4;//设置按钮sbit spk=P1^4;sbit sadd=P2^7;sbit sdel=P2^6;signed char second=0,minute=0,hour=0,count=0,keycount=0;signed char key=0;unsigned char code DIS1[] ={"距离系统爆炸时间"};unsigned char code DIS2[] ={"还剩:"};unsigned char code DIS31[] ={"时"};unsigned char code DIS32[] ={"分"};unsigned char code DIS33[] ={"秒"};unsigned char code DIS4[] ={"周林"};unsigned char code table2[]="0123456789";char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节/*********************延时子函数**************************/void delayNOP()//us延时子函数(4.34us){_nop_();_nop_();_nop_();_nop_();}void delayms(unsigned int ms)//ms延时子函数{unsigned char y;while (ms--){for (y = 0; y < 114; y++);}}//******************检查LCD忙状态**************************bit lcd_busy()//检查LCD忙状态1忙,0闲{bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0 &0x80);LCD_EN = 0;return (result);//***********************写指令数据***********************void lcd_wcmd(unsigned char cmd)//写指令数据到LCD{while (lcd_busy()){;}LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;P0 = cmd;delayNOP();LCD_EN = 0;}void lcd_wdat(unsigned char dat)//写显示数据到LCD{while (lcd_busy());LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;P0 = dat;delayNOP();LCD_EN = 0;}void writesmh(unsigned char add,unsigned char date)//显示个位和十位数据{unsigned char shi,ge;shi=date/10;ge=date%10;lcd_wcmd(0x80+add);delayms(5);lcd_wdat(table2[shi]);delayms(5);lcd_wdat(table2[ge]);delayms(5);}//*********************初始化设定****************************void lcd_init(){LCD_PSB = 1; //并口方式LCD_RST = 0; //液晶复位delayms(5); //液晶复位LCD_RST = 1; //液晶复位delayms(5); //液晶复位lcd_wcmd(0x34); //扩充功能设定,扩充指令,选8位数据delayms(5);lcd_wcmd(0x30); //功能设定,基本指令操作,选8位数据delayms(5);lcd_wcmd(0x0C); //显示开,关光标,关光标反白允许。
LCD液晶显示程序
//功能:LCD液晶显示程序,采用8位数据接口#include <iom16v.h>#include <macros.h> //库函数头文件,代码中引用了_nop()函数// 定义控制信号端口#define E 2#define RW 1#define RS 0//sbit RS=0xB0; //P3.0 sbit RS=P3^0;//sbit RW=0xB1; //P3.1//sbit E= 0xB2; //P3.2// 声明调用函数void lcd_w_cmd(unsigned char com); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数void delay1(); //软件实现延时函数,5个机器周期void gong(void);void main() //主函数{unsigned char lcd[]="yin hai chang";unsigned char i;PORTC=0xff; // 送全1到P0口DDRC=0xff;PORTB=0xff; // 送全1到P0口DDRB=0xff;int1(); // 初始化LCDdelay(255);lcd_w_cmd(0x80); // 设置显示位置delay(255);for(i=0;i<13;i++) // 显示字符串{lcd_w_dat(lcd[i]);delay(200);}gong();lcd_w_cmd(0x8f);lcd_w_dat(0x00);while(1); // 原地踏步//函数名:delay//函数功能:采用软件实现可控延时//形式参数:延时时间控制参数存入变量t中//返回值:无void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<50;j++);}//函数名:delay1//函数功能:采用软件实现延时,5个机器周期//形式参数:无//返回值:无void delay1(){_NOP();_NOP();_NOP();}//函数名:int1//函数功能:lcd初始化//形式参数:无//返回值:无void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0f); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}//函数名:lcd_r_start//函数功能:读状态字//形式参数:无//返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsigned char lcd_r_start(){unsigned char s;PORTB=PINB|(1<<RW); //RW=1; //RW=1,RS=0,读LCD状态delay1();PORTB=PINB&(~(1<<RS)); //RS=0;delay1();PORTB=PINB|(1<<E); //E=1; //E端时序delay1();s=PINC; //从LCD的数据口读状态delay1();PORTB=PINB&(~(1<<E));//E=0;delay1();// RW=0;delay1();return(s); //返回读取的LCD状态字}//函数名:lcd_w_cmd//函数功能:写命令字//形式参数:命令字已存入com单元中//返回值:无void lcd_w_cmd(unsigned char com){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环PORTB=PINB&(~(1<<RW));//RW=0;delay1();PORTB=PINB&(~(1<<RS));//RS=0; // RW=0,RS=0,写LCD命令字delay1();PORTB=PINB|(1<<E); //E=1; //E端时序delay1();PORTC=com; //将com中的命令字写入LCD数据口delay1();PORTB=PINB&(~(1<<E));//E=0;delay1();// RW=1;delay(255);}//函数名:lcd_w_dat//函数功能:写数据//形式参数:数据已存入dat单元中//返回值:无void lcd_w_dat(unsigned char dat)unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环PORTB=PINB&(~(1<<RW)); //RW=0;delay1();PORTB=PINB|(1<<RS); //RS=1; // RW=1,RS=0,写数据delay1();PORTB=PINB|(1<<E); //E=1; // E端时序delay1();PORTC=dat; // 将dat中的显示数据写入LCD数据口delay1();PORTB=PINB&(~(1<<E)); //E=0;delay1();// RW=1;delay(255);}void gong(void){lcd_w_cmd(0x40);lcd_w_dat(0x1f);lcd_w_cmd(0x41);lcd_w_dat(0x1f);lcd_w_cmd(0x42);lcd_w_dat(0x04);lcd_w_cmd(0x43);lcd_w_dat(0x04);lcd_w_cmd(0x44);lcd_w_dat(0x04);lcd_w_cmd(0x45);lcd_w_dat(0x1f);lcd_w_cmd(0x46);lcd_w_dat(0x1f);lcd_w_cmd(0x47);lcd_w_dat(0x00);}。
LCD12864液晶显示倒计时设计
长沙学院《单片机原理及应用》课程设计说明书题目LCD12864液晶显示倒计时器系(部)专业(班级)姓名学号指导教师起止日期课程设计任务书系(部):电子与通信工程系专业:目录概述 (4)一、设计目的 (5)二、设计任务与要求 (5)1、课题内容 (5)2、要求 (5)三、设计原理 (6)1、模块简介 (6)(1)单片机概述 (6)(2)LCD12864概述 (6)2、单片机最小系统电路 (6)3、电路总图 (7)4、软件设计思路 (7)5、设计结果 (8)四、设计心得及体会 (8)参考文献 (9)概述近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
模拟多通道压力系统是利用压力传感器采集当前压力并反映在显示器上,它可以分析压力过量程,并发出报警。
并采用电子秤原理可根据输入单价准确的计算出物体的金额。
本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的四位LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。
1、加深对单片机的了解和运用,掌握单片机芯片80C5X系列的逻辑功能及使用方法,并且提高学生的设计能力,以及提高综合运用所学知识的实际运用能力。
1、培养我们查阅数据手册的能力,以及提高我们对查阅资料的运用和理解。
2、通过设计的过程了解单片机的开发过程,以及对软件硬件设备的选择和应用。
3、学习并加深对Keil的运用,4、熟悉模拟电路的应用与集成电路的引脚排列。
PLC课程设计之LED倒计时显示控制
河南工业职业技术学院Henan Polytechnic Institute 课程设计说明书题目: LED倒计时显示控制班级:电气1002班姓名:***学号:*********指导教师: ***课程设计任务书一、设计题目:LED倒计时显示控制二、控制要求1.按下起动按钮绿灯亮,两个七段LED数码管显示数字45;每隔1秒LED显示的数字自动减1,直至减到0,然后转到要求2。
2.绿灯闪亮,周期为1s(亮0.5s,灭0.5s),绿灯闪亮3次后熄灭;两个七段LED数码管显示3,每隔1秒显示的数字自动减1,直至减到0,然后转到要求3;3.红灯亮,两个七段LED数码管显示数字30,每隔1秒显示的数字自动减1,直至减到0,然后转到要求1,如此循环,直到停止按钮被按下为止。
三、设计任务1.画出LED外形及段位与数字关系表。
2.画出PLC的I/O接线图。
3.画出梯形图。
4.说明工作原理。
5.编写10000字左右的设计说明书。
前言在没有实现数字化的时候,我们通常是采用手写或者是机械性的数字来进行倒计时,当今,PLC的发明,给我们带来了飞跃性的发展,让我们可以更好的实现数字化的控制,并且可以进行大规模的推广与应用。
随着社会的发展,倒计时在各行各业应用的越来越广泛,工业、技术、机械、医疗、农业等等,PLC 的智能控制原则是控制系统的核心,采用PLC把各种信息输入相应的程序,对于不同的要求,我们只要根据需要,修改一些程序,这样就可以实现我们想要的效果。
倒计时器的广泛应用,大大提高了我们的效率,对于一些需要通过手动或者是机械性的操作具有明显效果。
用可编程控制器实现倒计时的控制系统,以及该系统软、硬件设计方法,实验证明该系统实现简单、经济,有效,通过分析倒计时在控制与管理带来的方便,结合实际情况阐述了倒计时控制系统的工作原理,给出了一种简单实用的倒计时控制系统的PLC设计方案。
可编程序控制器在工业自动化中的地位极为重要,广泛的应用于各个行业。
带有LCD显示的音乐倒数计时器
信息工程学院课程设计报告书题目: 带有LCD显示的音乐倒数计时器专业:计算机科学与技术日近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制系统日新月益更新。
单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本次课程设计的项目是带有LED显示的音乐倒数计时器。
主体使用89C52,通过几个开关进行控制,其中开关K1用于切换时间设置状态和时钟运行状态;开关K2用于切换修改时间数值;开关K3用于使相应数值加1调节;开关K4用于减1调节;开关K5用于设定倒计时时间,并且设定好后到时间通过实验箱音频放出一段乐曲作为闹铃。
选做增加项目:还可增加秒表功能(精确到0.01s)或年月日设定功能关键词:单片机课程项目计时器 89C52摘要 (I)1前言 (1)1.1课题开发背景 (1)1.2课题研究的目的和意义 (1)1.3课题的主要研究工作 (1)2 系统硬件设计及说明 (3)2.1系统组成及总体框图 (3)2.2部分硬件方案论述 (3)2.3硬件电路图 (4)2.4元件清单 (4)2.4.1 AT89C52 (4)2.4.2 LCD1602 (5)2.4.3按键控制单元 (6)2.4.4 SPEAKER (7)3系统软件设计 (8)3.1系统总体功能流程图 (8)3.2使用单片机实现音乐节拍 (10)3.3使用单片机产生音频脉冲 (11)3.4使用定时器实现定时功能 (12)3.5程序描述 (12)4总结与展望 (15)参考文献 (16)1.1 课题开发背景随着单片机技术的成熟,单片机已经渗透到我们的学习、生活、生产和工作各个领域中, 凡是有自动控制要求的地方一般都会有单片机的身影出现:从简单到复杂,从空中、地面到地下,凡是能想象到的地方几乎都有使用单片机的需求。
单片机的应用有利于铲平的小型化、多功能化和智能化。
有利于提高生产、生活效率,保证安全。
59分59秒倒计时程序及仿真显示
一、59分59秒倒计时程序:/*倒计时及显示程序,适用于寻迹小车实验板*/#include<>#define uchar unsigned char#define uint unsigned intuchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳七段编码uchar temp=0;//定义定时器溢出计数变量,每隔50ms产生1次溢出,temp加1/*uint time=5959;//定义倒计时变量,当temp计数加20(20x50ms=1s)时,time减1 */uchar miao=59;uchar fen=59;sbit P0_7=P0^7 ;/*--定时计数器T0及其中断初始化函数--*/void timer0init(void){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位初值EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0}/*----------延时函数---------------*/void delay(uint n){uint i,j;for(i=n;i>0;i--)for(j=124;j>0;j--);}/*定时计数器中断程序,每当定时计数器溢出时触发中断,执行该程序*/void time0() interrupt 1{TH0=(65536-50000)/256;//重装初值TL0=(65536-50000)%256;if(temp==20){temp=0;if(miao==0){miao=59;if(fen==0) fen=59;else fen--;}else miao--;}else temp++;}/*--------------显示函数------------*/void display(void){P1=0xfe;//输出个位的位码P0=table[miao%10]; //输出时间个位的段码delay(5); //亮5msP1=0xfd;//输出十位的位码P0=table[miao/10]; //输出时间十位的段码delay(5); //亮5msP1=0xfb;P0=table[fen%10];P0_7=0;delay(5);P1=0xf7;P0=table[fen/10];delay(5);}/*----------主函数-----------------*/void main(void){timer0init();//调用初始化函数对定时计数器进行初始化while(1){display();//调用显示函数显示时间}}二、仿真电路及显示图:。
基于LCD显示的倒计时秒表设计
作品功能如下:1、倒计时秒表具有置数功能,在相应按键作用下,可将倒计时的初始值设置在0—9999.999范围内,计到0时自动停止。
2、秒表计时范围0—9999.999秒,精度到ms。
3、LCD实时显示秒表计时值。
4、系统时钟采用实验板上提供的50MHz时钟信号源。
5、设计成同步电路模式。
模块一:分频(1ms)参见文件夹中的cout_1ms.v)module cout_1ms(clk,rst,clock);input rst,clk;output clock;reg clock;integer i;always @(posedge clk or negedge rst)beginif(~rst) clock<=0;elsebegini=i+1;if(i==12500)beginclock<=~clock;i=1;endendendendmodule模块二:置数按键控制(参见文件夹中的ce.v)modulece(set,seth,dain,outcome1,outcome2,outcome3,outcome4,outcome5,outcome6,outcome 7);input set,seth;input[4:1] dain;output[4:1] outcome1=9,outcome2=9,outcome3=9,outcome4=9,outcome5=9,outcome6=9,outcome7=9;reg[4:1] outcome1,outcome2,outcome3,outcome4,outcome5,outcome6,outcome7;integer i=1,j=1;always@(posedge set)if(~seth)begincasez(i)1:outcome1<=dain;2:outcome2<=dain;3:outcome3<=dain;4:outcome4<=dain;5:outcome5<=dain;6:outcome6<=dain;7:outcome7<=dain;endcasei=i+1;if(i==7)i=1;endelse i=1;endmoduleset的第一个脉冲对第七个9置数,通过拨码置数,可调范围0~9.set的第二个脉冲对第六个9置数,通过拨码置数,可调范围0~9.set的第三个脉冲对第五个9置数,通过拨码置数,可调范围0~9.set的第四个脉冲对第四个9置数,通过拨码置数,可调范围0~9.set的第五个脉冲对第三个9置数,通过拨码置数,可调范围0~9.set的第六个脉冲对第二个9置数,通过拨码置数,可调范围0~9.set的第七个脉冲对第一个9置数,通过拨码置数,可调范围0~9.模块三:实现9999999~0的倒计数(参见文件夹中的counter_8gate.v)modulecounter_8gate(clk,rst,seth,en,stop,data1,data2,data3,data4,data5,data6,data7,outcome1, outcome2,outcome3,outcome4,outcome5,outcome6,outcome7);input clk,rst,en,stop,seth;input[4:1] data1,data2,data3,data4,data5,data6,data7;output[4:1]outcome1=9,outcome2=9,outcome3=9,outcome4=9,outcome5=9,outcome6=9,outcome7 =9;reg[4:1] outcome1,outcome2,outcome3,outcome4,outcome5,outcome6,outcome7; integer i=1,j=1;reg[1:0] key_reg;wire key_en;assign key_en=~key_reg[0] & key_reg[1];always @(posedge clk or negedge rst)if(~rst)key_reg<=2'b00;elsekey_reg<={key_reg[0],en};always@(posedge clk or negedge rst)beginif(~rst)beginoutcome1=9;outcome2=9;outcome3=9;outcome4=9;outcome5=9;outcome6=9;outcome7=9;i=1;j=2;endelse if(key_en||j>1)beginoutcome1=outcome1-1;j=2;if(outcome1==4'b1111)beginoutcome2=outcome2-1;outcome1=9;if(outcome2==4'b1111)beginoutcome3=outcome3-1;outcome2=9;if(outcome3==4'b1111)beginoutcome4=outcome4-1;outcome3=9;if(outcome4==4'b1111)beginoutcome5=outcome5-1;outcome1=4;if(outcome5==4'b1111)beginoutcome6=outcome6-1;outcome5=9;if(outcome6==4'b1111)beginoutcome7=outcome7-1;outcome6=9;if(outcome7==4'b1111)outcome7=9;endendendendendendendelse if(seth)beginoutcome1=data1;outcome2=data2;outcome3=data3;outcome4=data4;outcome5=data5;outcome6=data6;outcome7=data7;endendalways@(negedge stop)beginoutcome1=outcome1;outcome2=outcome2;outcome3=outcome3;outcome4=outcome4; outcome5=outcome5;outcome6=outcome6;outcome7=outcome7;endendmodule模块四:(分频,置数,倒计数整合模块)(参见文件中的counter.v)LCD模块大家已经和熟悉,所以不做任何分析.。
51单片机100天倒计时牌完整程序
51单片机100天倒计时牌完整程序/************************************************************** *******///用于一百天之内的倒计时//可调具体定时时间/************************************************************** *******///使用12MHZ晶振,P1口输出段码P3口口作列扫描,用共阳LED数码管#include#include#define uchar unsigned char#define uint unsigned intuchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0xff};// 共阳LED段码表//涉及到减1小于0的问题,timedata[8] 使用符号数据char data timedata[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//计时单元数据初值,共8个//0.1.2.3.4.5分别表示秒低,秒高,分低,分高,时低,时高位,天数//////uchar data con1s=0x00; //1秒定时用?uchar n;//记录按键次数sbit led1=P0^5;sbit led2=P0^6;sbit led3=P0^7;sbit key0=P2^1; //大键盘sbit key4=P2^5; //从左到右4.3.2.1号键盘sbit key3=P2^4; //4高位加,3高位减,2低位加,1低位减sbit key2=P2^3; //sbit key1=P2^2; ////延时x毫秒void delay1ms(uint x){uint i,j;for (i=x;i>0;i--)for(j=110;j>0;j--); //延时一毫秒,j取110}/****************/// 键扫描子程序 ///****************/void keyscan(){ uint a;uint tiaojie=1;n=0;while(tiaojie){if(key0==0) // 按下调整按键,进入键盘扫描程序{delay1ms(5);if(key0==0){while(!key0);n=n+1; //记录按键次数//按键第二次N=1,调节天数;N=2,调节小时;N=3,调节分钟;N=4,调节秒数;//按键从左到右依次高位加减,低位加减if(n==5){n=0;tiaojie=0;}}}if(n!=0){if(n==1) //天数调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);timedata[7]=timedata[7]+1; if(timedata[7]>9) {timedata[7]=0;}}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);timedata[7]=timedata[7]-1; if(timedata[7]<0) {timedata[7]=9;}}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[6]=timedata[6]+1; if(timedata[6]>9) {timedata[6]=0;}P1=dis_7[timedata[6]];//天数P3=0Xbf;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[6]=timedata[6]-1; if(timedata[6]<0) {timedata[6]=9;}P1=dis_7[timedata[6]];//天数P3=0Xbf;a=110;while(a--);}} //温度的第一位加1}if(n==2) //小时调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[5]=timedata[5]+1; if(timedata[5]>2) {timedata[5]=0;}P1=dis_7[timedata[5]];//P3=0Xdf;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[5]=timedata[5]-1; if(timedata[5]<0) {timedata[5]=2;}P1=dis_7[timedata[5]];//P3=0Xdf;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);if(timedata[5]==2){timedata[4]=timedata[4]+1; if(timedata[4]>3) {timedata[4]=0;}}else{timedata[4]=timedata[4]+1; if(timedata[4]>9) {timedata[4]=0;}}P1=dis_7[timedata[4]];//P3=0Xef;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[4]=timedata[4]-1;if(timedata[4]<0)if(timedata[5]==2) {timedata[4]=3;}else{timedata[4]=9;}P1=dis_7[timedata[4]];//P3=0Xef;a=110;while(a--);}} //温度的第一位加1}if(n==3) //分钟调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[3]=timedata[3]+1; if(timedata[3]>5) {timedata[3]=0;}P1=dis_7[timedata[3]];//P3=0Xf7;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[3]=timedata[3]-1; if(timedata[3]<0) {timedata[3]=5;}P1=dis_7[timedata[3]];//P3=0Xf7;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[2]=timedata[2]+1; if(timedata[2]>9) {timedata[2]=0;}P1=dis_7[timedata[2]];//P3=0Xfb;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[2]=timedata[2]-1; if(timedata[2]<0) {timedata[2]=9;}P1=dis_7[timedata[2]];//P3=0Xfb;a=110;while(a--);}} //温度的第一位加1}if(n==4) //秒数调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[1]=timedata[1]+1; if(timedata[1]>5) {timedata[1]=0;}P1=dis_7[timedata[1]];//天数P3=0Xfd;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[1]=timedata[1]-1; if(timedata[1]<0) {timedata[1]=5;}P1=dis_7[timedata[1]];//天数P3=0Xfd;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[0]=timedata[0]+1; if(timedata[0]>9) {timedata[0]=0;}P1=dis_7[timedata[0]];P3=0Xfe;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[0]=timedata[0]-1; if(timedata[0]<0) {timedata[0]=9;}P1=dis_7[timedata[0]];//天数P3=0Xfe;a=110;while(a--);} //温度的第一位加1}}}EA=1;//退出调节过程,开中断}/***********///扫描程序///**********/scan(){uint a;P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);P1=dis_7[timedata[6]];P3=0Xbf;a=110;while(a--);P1=dis_7[timedata[5]];//小时数P3=0Xdf;a=110;while(a--);P1=dis_7[timedata[4]];P3=0xef;a=110;while(a--);P1=dis_7[timedata[3]];//分钟数P3=0xf7;a=110;while(a--);P1=dis_7[timedata[2]];P3=0xfb;a=110;while(a--);P1=dis_7[timedata[1]];//秒数P3=0xfd;a=110;while(a--);P1=dis_7[timedata[0]];P3=0xfe;a=110;while(a--);}/*************///初始化程序//clearmen(){TH0=0x3C;TL0=0xB0;// ;50MS定时初值(T0计时用)TH1=0x3C;TL1=0xB0;// ;50MS定时初值(T1计时用)TMOD=0X11;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;//设置定时器工作方式,开定时器led1=0;led2=0;led3=0;delay1ms(1000);led1=1;led2=1;led3=1;timedata[0]=9;timedata[1]=5;timedata[2]=9;timedata[3]=5;timedata[4]=3;timedata[5]=2;timedata[6]=9;timedata[7]=9;}//主程序///*********/void main(){clearmen();while (1){scan();if(key0==0) // 按下调整按键,进入键盘扫描程序{delay1ms(200);if(key0==0){while(!key0);led1=0;//进入键盘扫描之后,三个指示灯点亮led2=0;led3=0;EA=0;P1=0x8E;/*F*/P3=0xfe; //最后一位数码管显示 0x8E,/*F*/,表示等待按键检测keyscan();}}}}/********************///1秒中断处理程序 ///*******************/void time_intt0(void) interrupt 1{ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;con1s++;if(con1s==20){con1s=0x00;timedata[0]--;led1=~led1;led2=~led2;led3=~led3;//正常倒计时三个指示灯每隔1秒钟点亮if(timedata[0]<0){timedata[0]=9;timedata[1]--;if(timedata[1]<0){timedata[1]=5;timedata[2]--;if(timedata[2]<0){timedata[2]=9;timedata[3]--;if(timedata[3]<0){timedata[3]=5;timedata[4]--;if(timedata[4]<0){timedata[4]=9;timedata[5]--;}if(timedata[5]<0 ) {timedata[5]=2; timedata[4]=3; timedata[6]--;if(timedata[6]<0 ) {timedata[6]=9; timedata[7]--;if(timedata[7]<0 ) {timedata[7]=9; }}}}}}}}ET0=1;}。
LCD倒计时
《单片机原理及应用》课程设计任务书题目:LCD显示的音乐倒计时制作姓名:学号:学院:电气工程与自动化学院专业:电气工程与自动化学院年级:2012级指导教师:高伟设计任务一,技术要求利用PIC16F887单片机控制字符型LCD显示器制作一个简易的倒数计数器,可以用来煮方便面、煮开水或小睡片刻等。
先进行一小段时间倒计数,当倒计数到0时,则发出一段音乐声响,通知主人时间到,去做该做的事情。
该程序共有有5个功能键:K1——设置,LCD显示5:00;K2——时间增加倍数切换键,在1分钟和10分钟之间切换;K3——时间增;K4——时间减;K5——开始倒计数。
定时闹钟的基本功能如下。
●字符型LCD(16 2)显示器。
●显示格式为“TIME 分分:秒秒”。
用4个按键操作来设置当前想要倒计数的时间。
一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。
设计任务一、技术要求使用单总线的DS18B20测量温度,进行LCD液晶显示,当温度超过50℃时,通过指示灯报警。
请根据需求撰写任务书,写出详细的功能,以及设计步骤。
在课程设计之前提交给老师。
(可以对内容进行扩展,可适当加分)二、拟采用的方法(包括芯片的选型等)51芯片采用国产STC89C52作为主控.美国达拉斯公司生产的DS18B20温度传感器芯片进行温度采集。
和DALLAS公司的实时时钟芯片DS1302对年月日周日分秒进行计时。
采用LCD1602进行温度、实时时间等显示。
用蜂鸣器与LED灯进行报警。
基于ZigBee无线通信的开关柜发热点无线测温终端设计姓名:卢国仪指导老师:高伟专业:电气工程与自动化学号:010800321摘要:本论文主要从无线测温终端的设计入手,采用了新型ZigBee无线通信技术,从硬件电路设计与软件程序设计两方面展开了课题的研究。
考虑到封闭式开关柜内工作温度高,变电站运行过程中不能频繁停电两大因素。
因此选择了能够耐高温而且可以工作于低功耗模式下的元器件。
(整理)LCD计数显示程序.
use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity counter isPort ( clk : in std_logic;resetn : in std_logic;dout : out std_logic_vector(7 downto 0);lcd_en : out std_logic;lcd_rs : out std_logic;lcd_rw : out std_logic);end counter;architecture Behavioral of counter iscomponent counter60 isPort ( clk : in std_logic;resetn : in std_logic;dout : out std_logic_vector(7 downto 0));end component;component decoder isPort (din:in std_logic_vector(3 downto 0 );dout:out std_logic_vector(8 downto 0) );end component;component lcd_interface isport (clk : in std_logic;resetn : in std_logic;dout_s10 : in std_logic_vector (8 downto 0);dout_s1 : in std_logic_vector (8 downto 0);lcd_data : out std_logic_vector (7 downto 0);lcd_en : out std_logic;lcd_rs : out std_logic;lcd_rw : out std_logicend component;signal ddout_s10 : std_logic_vector (8 downto 0);signal ddout_s1 : std_logic_vector (8 downto 0);signal ddout : std_logic_vector (7downto 0);beginu1: counter60 port map(clk,resetn,ddout);u2: decoder port map(ddout(7 downto 4),ddout_s10);u3: decoder port map(ddout(3 downto 0),ddout_s1);u4: lcd_interface port map(clk,resetn, ddout_s10,ddout_s1,dout,lcd_en, lcd_rs , lcd_rw);end Behavioral;---------------------------------------------------------------------------------- Company:-- Engineer:---- Create Date: 13:36:10 03/30/06-- Design Name:-- Module Name: count60 - Behavioral-- Project Name:-- Target Device:-- Tool versions:-- Description:---- Dependencies:---- Revision:-- Revision 0.01 - File Created-- Additional Comments:---------------------------------------------------------------------------------- library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter60 isPort ( clk : in std_logic;resetn : in std_logic;dout : out std_logic_vector(7 downto 0));end counter60;architecture Behavioral of counter60 issignal count : std_logic_vector(7 downto 0);signal count_div : std_logic_vector (25 downto 0);begindout <= count;process (clk)beginif (clk'event and clk = '1') thenif (resetn = '0') thencount_div <= (others => '0');else if (count_div (25) = '1') thencount_div <= (others =>'0') ;elsecount_div <= count_div + 1;end if;end if;end if;end process;process(clk ,resetn)beginif resetn= '0' thencount <= (others => '0');elsif rising_edge(clk) thenif (count_div (25) = '1') thenif count(3 downto 0)="1001" thencount(3 downto 0)<="0000";count(7 downto 4)<=count(7 downto 4) +1;elsecount(3 downto 0)<=count(3 downto 0)+1;end if;if count="01011001" thencount<="00000000";end if;end if;end if;end process;end Behavioral;-------------------------------------------------------------------------------- -- Company:-- Engineer:---- Create Date: 13:25:37 03/30/06-- Design Name:-- Module Name: decoder - Behavioral-- Project Name:-- Target Device:-- Tool versions:-- Description:---- Dependencies:---- Revision:-- Revision 0.01 - File Created-- Additional Comments:---------------------------------------------------------------------------------- library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity decoder isPort (din:in std_logic_vector(3 downto 0 ); --四位二进制码输入dout:out std_logic_vector(8 downto 0) ); --输出LED七段码end decoder;architecture Behavioral of decoder isbeginprocess(din)begincase din iswhen "0000" => dout<="100110000";--30when "0001" => dout<="100110001";--31when "0010" => dout<="100110010";--32when "0011" => dout<="100110011";--33when "0100" => dout<="100110100"; --34when "0101" => dout<="100110101";--35when "0110" => dout<="100110110";--36when "0111" => dout<="100110111";--37when "1000" => dout<="100111000";--38when "1001" => dout<="100111001";--39when others => dout<="100100000" ;end case;end process;end Behavioral;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity lcd_interface isport (clk : in std_logic;resetn : in std_logic;dout_s10 : in std_logic_vector (8 downto 0);dout_s1 : in std_logic_vector (8 downto 0);lcd_data : out std_logic_vector (7 downto 0);lcd_en : out std_logic;lcd_rs : out std_logic;lcd_rw : out std_logic);end lcd_interface;architecture lcd_interface_arch of lcd_interface issignal lcd_we_n : std_logic;signal lcd_en_int : std_logic;signal w_comp_n : std_logic;signal seq_count : std_logic_vector (5 downto 0);signal lcd_rs_data : std_logic_vector (8 downto 0);signal delay_count : std_logic_vector (15 downto 0);signal lcd_addr : std_logic_vector (5 downto 0);type state_lcd_write_type is (lcd_write_idle, lcd_write_1, lcd_write_2, lcd_write_3, lcd_write_4);signal state_lcd_write : state_lcd_write_type;type state_type is (idle, wait_1, wait_2, state_1, state_2, state_3, done);signal state : state_type;begin-- The following state machine initializes the LCD and writes the following message -- to the LCD panel-- Memec Design-- MB1000 Board------ The LCD initialization sequence consist of writing the 0x38, 0x38, 0x06, 0x0e,-- 0x01, 0x80, 0xc0 sequence of hex numbers to the LCD control registers (please -- refer to the LCD datasheet for an explanation of the initialization sequence).-- At the end of the LCD initialization sequence, the LCD is ready to be written-- to starting with line 1. It should be noted that delays are inserted between-- 2 writes to the LCD panel to meet the LCD initialization requirements. Although, -- the LCD panel requires different delays between 2 writes, a fix delay of 20ms is -- inserted between 2 writes to simply the initialization design (the 20ms is the-- longest delay that is required by the LCD panel). A 22-bit counter is used to-- generate this fix delay.sequencer_state_register: process (clk, resetn)beginif (resetn = '0') thenstate <= idle;elsif (clk'event and clk = '1') thencase state iswhen idle=>if (delay_count(15) = '1') thenstate <= wait_1;elsestate <= idle;end if;when wait_1=>if (delay_count(15) = '1') thenstate <= state_1;elsestate <= wait_1;end if;when state_1=>state <= state_2;when state_2=>if ((w_comp_n = '0') and (lcd_addr = "000110")) thenstate <= wait_2;elsif (w_comp_n = '0') thenstate <= wait_1;elsestate <= state_2;end if;-- The following sections performs the writing of the above message to the LCD-- panel. Similar to the initialization section, a fix delay is inserted between-- 2 LCD writes. The 22-bit counter used in the initialization section is also-- used here to generate the fix delay.when wait_2=>if (delay_count(15) = '1') thenstate <= state_3;elsestate <= wait_2;end if;when state_3=>if ((w_comp_n = '0') and (lcd_addr = "100111")) thenstate <= done;elsif (w_comp_n = '0') thenstate <= wait_2;elsestate <= state_3;end if;when done=>state <= done;end case;end if;end process sequencer_state_register;-- The following section generates a write enable (lcd_we_n) signal based on the -- state of the above state machine that is used to generate the lcd_en signal.sequencer_state_logic: process (state)begincase state iswhen idle=>lcd_we_n <= '1';when wait_1=>lcd_we_n <= '1';when wait_2=>lcd_we_n <= '1';when state_1=>lcd_we_n <= '0';when state_2=>lcd_we_n <= '0';when state_3=>lcd_we_n <= '0';when done=>lcd_we_n <= '1';end case;end process sequencer_state_logic;-- The following sections uses the lcd_we_n signal to generate the lcd_en signal and-- a write complete signal (w_comp_n). The w_comp_n signal is used to reset various -- counters that are used to generate LCD control signals.state_lcd_write_register: process (clk, resetn)beginif (resetn = '0') thenstate_lcd_write <= lcd_write_idle;elsif (clk'event and clk = '1') thencase state_lcd_write iswhen lcd_write_idle=>if (lcd_we_n = '0') thenstate_lcd_write <= lcd_write_1;elsestate_lcd_write <= lcd_write_idle;end if;when lcd_write_1=>if (seq_count = "000101") thenstate_lcd_write <= lcd_write_2;elsestate_lcd_write <= lcd_write_1;end if;when lcd_write_2=>if (seq_count = "011110") thenstate_lcd_write <= lcd_write_3;elsestate_lcd_write <= lcd_write_2;end if;when lcd_write_3=>if (seq_count = "110010") thenstate_lcd_write <= lcd_write_4;elsestate_lcd_write <= lcd_write_3;end if;when lcd_write_4=>state_lcd_write <= lcd_write_idle;end case;end if;end process state_lcd_write_register;state_lcd_write_logic: process (state_lcd_write)begincase state_lcd_write iswhen lcd_write_idle=>lcd_en_int <= '0';w_comp_n <= '1';when lcd_write_1=>lcd_en_int <= '0';w_comp_n <= '1';when lcd_write_2=>lcd_en_int <= '1';w_comp_n <= '1';when lcd_write_3=>lcd_en_int <= '0';w_comp_n <= '1';when lcd_write_4=>lcd_en_int <= '0';w_comp_n <= '0';end case;end process state_lcd_write_logic;-- The following process provides the LCD initialization data and also the ASCII-- characters needed to write the "Memec Design MB1000 Board" to the LCD panel. Once, -- the "Memec Design" is written to the first line of the LCD, hex 0xc0 is written to-- the LCD control register to start at line 2 and write the "MB1000 Board" to the-- LCD panel. The lcd_rs_data consist of the lcd_rs signal (MSB) and 8 bits of data-- (lcd_data).process (lcd_addr)begincase lcd_addr iswhen "000000" => lcd_rs_data <= "000111000"; -- lcd initializationswhen "000001" => lcd_rs_data <= "000111000";when "000010" => lcd_rs_data <= "000000110";when "000011" => lcd_rs_data <= "000001110";when "000100" => lcd_rs_data <= "000000001";when "000101" => lcd_rs_data <= "010000000";when "000110" => lcd_rs_data <= "000001100";when "000111" => lcd_rs_data <= "100100000";when "001000" => lcd_rs_data <= "100100000";when "001001" => lcd_rs_data <= dout_s10; -- lcd first line, "Memec Design"when "001010" => lcd_rs_data <= dout_s1;when "001011" => lcd_rs_data <= "100100000";when "001100" => lcd_rs_data <= "100100000";when "001101" => lcd_rs_data <= "100100000";when "001110" => lcd_rs_data <= "100100000";when "001111" => lcd_rs_data <= "100100000";when "010000" => lcd_rs_data <= "100100000";when "010001" => lcd_rs_data <= "100100000";when "010010" => lcd_rs_data <= "100100000";when "010011" => lcd_rs_data <= "100100000";when others => lcd_rs_data <= "100100000";end case;end process;-- The following is a 22-bit free running counter that is cleared when the reset-- signal is asserted or the MSB of the counter goes to 1. This counter is used-- to generate delays between back-to-back writes to the LCD panel during the-- initialization and also normal write cycles.process (clk)beginif (clk'event and clk = '1') thenif (resetn = '0') thendelay_count <= (others => '0');else if (delay_count(15) = '1') thendelay_count <= (others =>'0') ;elsedelay_count <= delay_count + 1;end if;end if;end if;end process;-- The following counter is used by the sequencer to generate the lcd_en signal. -- The counter is reset at the end of each write to the LCD when the w_comp_n -- signal goes active.process (clk)beginif (clk'event and clk = '1') thenif ((resetn = '0') or (w_comp_n = '0')) thenseq_count <= (others => '0');elsif (lcd_we_n = '0') thenseq_count <= seq_count + 1;end if;end if;end process;-- The following block generates the address pointer to the LCD initialization and-- data values. The counter is incremented at the end of each write to the LCD panel -- when the w_comp_n signal goes active.process (clk)beginif (clk'event and clk = '1') thenif (resetn = '0') thenlcd_addr <= (others => '0');elsif (w_comp_n = '0') thenif (lcd_addr = "011111") thenlcd_addr <= "000000";elselcd_addr <= lcd_addr + 1;end if;end if;end if;end process;-- The following sections define the LCD data and control signals. For this reference-- design, the lcd_rw signal is set to "0" forcing all LCD accesses to be write cycles.lcd_data <= lcd_rs_data(7 downto 0);lcd_en <= lcd_en_int;lcd_rs <= lcd_rs_data(8);lcd_rw <= '0';end lcd_interface_arch;。
倒计时显示屏设置方法
倒计时显示屏设置方法
一、设置屏体参数:
设置》参数
二、添加计时模块
点图标“计时”,按下图配置好计时模块参数。
三、添加字幕模块
点图标“字幕”,按下图配置好计时模块参数。
四、将编辑好的内容导入U盘
先插入U盘(标准U盘,读卡器不行),点图标U盘,点“导入U盘”按钮,将设置参数保存到U盘。
如果需要调整显示屏时间,在导入U盘时将“校时”选中,
选“手动”,将时间设置成即将把U盘插入到显示屏的时间,同样点“导入U盘”按钮,将设置参数保存到U盘。
在设置好校时的时间到来的时候,将U盘插入到显示屏,时间即被导入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
倒计时显示程序程序:#include<reg52.h> //52单片机头文件,一般不要改动,里面包含特殊功能寄存器的定义#include <intrins.h>#define uchar unsigned char //将unsigned char定义为uchar,简化输写。
提高编程速度#define uint unsigned int //将unsigned char定义为uint,简化输写。
提高编程速度sbit lcdrs=P1^0; //数据命令选择控制sbit lcdrw=P1^1; //读/写选择控制sbit lcden=P1^2; //使能信号sbit SCL2=P1^3; //SCL2定义为P1口的第3位脚,连接DS1302SCL 和ADC0831SCL脚sbit SDA2=P1^4; //SDA2定义为P1口的第4位脚,连接DS1302SCL 和ADC0831SDA脚sbit RST = P1^5; // DS1302片选脚sbit H1=P0^4; //高四位分别对应P04-P07sbit H2=P0^5;sbit H3=P0^6;sbit H4=P0^7;sbit D=P1^7;unsigned char l_tmpdate[8]={0x00,0x06,0x03,0x18,0x0c,0x07,0x06,0}; unsigned char l_tmpdisplay[8]={0x40,0x40,0x40,0x40,0x40,0x40,0x40,0}; code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};uchar t0[]=" - - ";uchar t1[]=" : : ";uchar wendu[]="0123456789";uchar shi,ge;uchar nian,yue,ri,shi,fen;uchar key,num;long number;uchar j;uchar flag,m,n;uchar qian2,bai2,shi2,ge2; void delay1(uchar z){uchar x,y;for(x=1000;x>1;x--)for(y=z;y>1;y--);}void delay(uchar z){uchar x,y;for(x=1000;x>1;x--)for(y=z;y>1;y--);}void write_com(uchar com) {lcdrs=0;P2=com;delay1(5);lcden=1;delay1(5);lcden=0;}void write_date(uchar date) {lcdrs=1;P2=date;delay1(5);lcden=1;delay1(5);lcden=0;}void init_lcd(){uchar i;lcden=0;lcdrw=0;write_com(0x38);write_com(0x01);write_com(0x0c);write_com(0x06);write_com(0x80);for(i=0;i<16;i++){write_date(t0[i]);delay(0);}write_com(0x80+0x40);for(i=0;i<16;i++){write_date(t1[i]);delay(0);}}/**************************DS1302************************************ */void Write_Ds1302_Byte(unsigned char temp){unsigned char i;for (i=0;i<8;i++) //循环8次写入数据{SCL2=0;SDA2=temp&0x01; //每次传输低字节temp>>=1; //右移一位SCL2=1;}}/******************************************************************** ********/void Write_Ds1302( unsigned char address,unsigned char dat ) {RST=0;_nop_();SCL2=0;_nop_();RST=1;_nop_(); //启动Write_Ds1302_Byte(address); //发送地址Write_Ds1302_Byte(dat); //发送数据RST=0; //恢复}/******************************************************************** ********/unsigned char Read_Ds1302 ( unsigned char address ){unsigned char i,temp=0x00;RST=0;_nop_();SCL2=0;_nop_();RST=1;_nop_();Write_Ds1302_Byte(address);for (i=0;i<8;i++) //循环8次读取数据{if(SDA2)temp|=0x80; //每次传输低字节SCL2=0;temp>>=1; //右移一位SCL2=1;}RST=0;_nop_(); //以下为DS1302复位的稳定时间RST=0;SCL2=0;_nop_();SCL2=1;_nop_();SDA2=0;_nop_();SDA2=1;_nop_();return (temp); //返回}/*读取日历*/void Read_RTC(void){unsigned char i,*p;p=read_rtc_address; //地址传递for(i=0;i<7;i++) //分7次读取年月日时分秒星期{l_tmpdate[i]=Read_Ds1302(*p);p++;}}/*设定日历*/void Set_RTC(void){unsigned char i,*p,tmp;for(i=0;i<7;i++){tmp=l_tmpdate[i]/10;l_tmpdate[i]=l_tmpdate[i]%10;l_tmpdate[i]=l_tmpdate[i]+tmp*16;}Write_Ds1302(0x8e,0x00);p=write_rtc_address; //传地址for(i=0;i<7;i++) //7次写入年月日时分秒星期{Write_Ds1302(*p,l_tmpdate[i]);p++;}Write_Ds1302(0x80,0x00);}void jiaoshi(){switch(j){case 0:break;case 1:{nian=num/10*16+num%10;Write_Ds1302(0x8c,nian);//年break;}case 2:{yue=num/10*16+num%10;Write_Ds1302(0x88,yue); //月break;}case 3:{ri=num/10*16+num%10;Write_Ds1302(0x86,ri); //日break;}case 4:{shi=num/10*16+num%10;Write_Ds1302(0x84,shi); //时break;}case 5:{fen=num/10*16+num%10;Write_Ds1302(0x82,fen); //分break;}}}void display(){uchar nians,niang,yues,yueg,ris,rig;uchar shis,shig,fens,feng,miaos,miaog;uchar qian1,bai1,shi1,ge1;nians=l_tmpdate[6]/16;niang=l_tmpdate[6]&0x0f;yues=l_tmpdate[4]/16;yueg=l_tmpdate[4]&0x0f;ris=l_tmpdate[3]/16;rig=l_tmpdate[3]&0x0f;shis=l_tmpdate[2]/16/10;shig=l_tmpdate[2]&0x0f;fens=l_tmpdate[1]/16;feng=l_tmpdate[1]&0x0f;miaos=l_tmpdate[0]/16;miaog=l_tmpdate[0]&0x0f;if(shis==0&&shig==0&&fens==0&&feng==0&&miaos==0&&miaog==0)number--;if(number==0) D=0;write_com(0x80+4);write_date(wendu[nians]);write_com(0x80+5);write_date(wendu[niang]);write_com(0x80+7);write_date(wendu[yues]);write_com(0x80+8);write_date(wendu[yueg]);write_com(0x80+10);write_date(wendu[ris]);write_com(0x80+11);write_date(wendu[rig]);write_com(0x80+0x40);write_date(wendu[shis]);write_com(0x80+0x40+1); write_date(wendu[shig]);write_com(0x80+0x40+3); write_date(wendu[fens]);write_com(0x80+0x40+4); write_date(wendu[feng]);write_com(0x80+0x40+6); write_date(wendu[miaos]);write_com(0x80+0x40+7); write_date(wendu[miaog]);qian1=number/1000;bai1=number%1000/100;shi1=number%1000%100/10;ge1=number%10;write_com(0x80+0x40+10); write_date(wendu[qian1]);write_com(0x80+0x40+11); write_date(wendu[bai1]);write_com(0x80+0x40+12);write_date(wendu[shi1]);write_com(0x80+0x40+13);write_date(wendu[ge1]);}void Init(){EA=1; //首先开启总中断EX0=1; //开启外部中断 0IT0=1; // 设置成下降沿触发方式EX1=1; //开启外部中断 0IT1=1;}/***************************键盘*************************************/uchar saomiao(){P0=0xfe;if(H1==0){key=1;} //按键盘S1,显示"0"if(H2==0){key=2;} //按键盘S2,显示"1"if(H3==0){key=3;} //按键盘S3,显示"2"if(H4==0){key=4;} //按键盘S4,显示"3"P0=0xfd;if(H1==0){key=5;} //按键盘S5,显示"4"if(H2==0){key=6;} //按键盘S6,显示"5"if(H3==0){key=7;} //按键盘S7,显示"6"if(H4==0){key=8;} //按键盘S8,显示"7"P0=0xfb;if(H1==0){key=9;} //按键盘S9,显示"8"if(H2==0){key=0;} //按键盘S10,显示"9"P0=0xf0;if((H1==1)&&(H2==1)&&(H3==1)&&(H4==1)){key=100;}return(key);}/**************************键盘扫描***************************************/uchar jianpan(){num=0;if(m==1){if(j<=5){n=j;if(j==1)write_com(0x80+4);if(j==2)write_com(0x80+7);if(j==3)write_com(0x80+10);if(j==4)write_com(0x80+0x40);if(j==5)write_com(0x80+0x40+3);while((saomiao()==100)&&m==1&&(j-n==0));while((saomiao()!=100)&&m==1&&(j-n==0)){shi=saomiao();if(j==1){write_com(0x80+4);write_date(wendu[shi]);}if(j==2){write_com(0x80+7);write_date(wendu[shi]);}if(j==3){write_com(0x80+10);write_date(wendu[shi]);}if(j==4){write_com(0x80+0x40);write_date(wendu[shi]);}if(j==5){write_com(0x80+0x40+3);write_date(wendu[shi]);}}while((saomiao()==100)&&m==1&&(j-n==0)); while((saomiao()!=100)&&m==1&&(j-n==0)) {ge=saomiao();if(j==1){write_com(0x80+5);write_date(wendu[ge]);write_com(0x80+4);}if(j==2){write_com(0x80+8);write_date(wendu[ge]);write_com(0x80+7);}if(j==3){write_com(0x80+11);write_date(wendu[ge]);write_com(0x80+10);}if(j==4){write_com(0x80+0x40+1);write_date(wendu[ge]);write_com(0x80+0x40);}if(j==5){write_com(0x80+0x40+4);write_date(wendu[ge]);write_com(0x80+0x40+3);}num=shi*10+ge;}}if(j==6){write_com(0x80+0x40+10);while((saomiao()==100)&&m==1);while((saomiao()!=100)&&m==1){qian2=saomiao();write_com(0x80+0x40+10);write_date(wendu[qian2]);}while((saomiao()==100)&&m==1);while((saomiao()!=100)&&m==1){bai2=saomiao();write_com(0x80+0x40+11);write_date(wendu[bai2]);}while((saomiao()==100)&&m==1);while((saomiao()!=100)&&m==1){shi2=saomiao();write_com(0x80+0x40+12);write_date(wendu[shi2]);}while((saomiao()==100)&&m==1);while((saomiao()!=100)&&m==1){ge2=saomiao();write_com(0x80+0x40+13);write_date(wendu[ge2]);}number=qian2*1000+bai2*100+shi2*10+ge2;}}return(num);}void main(){ D=1;Init();init_lcd();Set_RTC();number=1234;j=0;m=0;while(1){num=jianpan();jiaoshi();if(m==0){Read_RTC();display();delay1(10);}}}void INTI0() interrupt 0{m=0;j=0;Write_Ds1302(0x80,0x00);Write_Ds1302(0x8e,0x80); //写保护,禁止写write_com(0x0c);delay(50);}void INTI1() interrupt 2{Write_Ds1302(0x8e,0x00); //1302写保护,允许写Write_Ds1302(0x80,0x80);m=1;j++;write_com(0x0f);if(j==7){j=1;}delay(50);}。