当前位置:文档之家› PIC16F877A数字时钟时钟程序(优推内容)

PIC16F877A数字时钟时钟程序(优推内容)

PIC16F877A数字时钟时钟程序(优推内容)
PIC16F877A数字时钟时钟程序(优推内容)

;Digit clock

;-----------------------------------------------

;DA TE :20101205

;Author:Tang HS

;M C U :PIC16F877A

;FileName : ClockPIC.ASM

;-----------------------------------------------------------

;Date: {2010/12/07.14:35}-V er01--CS-ICD:0xAFCE---ISP:0xb7ce----

;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义

;------------------------------------------------------------

;-----------------------------------------------------------

;Date: {2010/12/07.22:15}-V er01--CS-ICD:0xAFCE---ISP:0xb7ce----

;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义

; 2.RB0-SET_KEY;RB1-ADD_KEY;RB2-SUB_KEY;RB3-EXIT_KEY

;------------------------------------------------------------

;Date: {2010/12/09.18:06}-V er02--CS-ICD:0xAFCE---ISP:0xef0e----

;************************************************************

;Date: {2010/12/10.00:47}-V er03--CS-ICD:0xb08d---ISP:0xfaa7----

;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义

; 2.RB0-SET_KEY;RB1-ADD_KEY;RB2-SUB_KEY;RB3-EXIT_KEY 都OK ; 3.MOVLW 纠正MOVV REG,1 引起的SUB_不良;

;--------------------------------------------------------------

;Date: {2010/12/10.13:10}-V er03.1--CS-ICD:0xb08b---ISP:0xfaa4----

; 4.时差。50ms原来计数20次改为19次;250us原来计数200次改为197次;---------------------------------------------------------------

;Date: {2010/12/10.17:30}-V er03.2--CS-ICD:0x296B---ISP:0x7387----

; 5.在Set_ini中--增加CALL SET_Flag;指定Flag,1=1;标志位-

---解决Ver03.1-第一次按SET键时不能调HourL&HourH的问题

;------------------------------------------------------------

;************************************************

;程序清单

;**************************************************

__CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭

;************************************************

;-----------------------------------------------

include P16F877A.INC

;-----------------------------------------------

;-----------------ram varable------------------------------

HourH equ 20H ;

HourL equ 21H ;

MinH equ 22H ;

MinL equ 23H ;

SecH equ 24h ;

SecL equ 25h ; B'0010 0101'

;N250us equ 26h ;250us*200=50ms

;N50ms equ 27h ;50ms*20=1000ms

;Nsec equ 28h ;

data1 equ 29h ;定义一个廷时变量寄存器

data2 equ 2Ah ;定义另一个廷时变量寄存器

keyvalue EQU 2Bh ;

FlagKey EQU 2Ch ;

W_STK equ 2Dh ;----------------

STA TUS_STK equ 2Eh ;

PCLATH_STK equ 2Fh ;

FSR_STK equ 30h ;---------------

COUNT0 equ 31h ; DELAY use 0011 0000

COUNT1 equ 32h ;

COUNT2 equ 33h ;

Flag equ 34h ;---Adjust.Time---------

N250us equ 35h ;250us*200=50ms

N50ms equ 36h ;50ms*20=1000ms

Nsec equ 37h ;

;------------------Counstant------------------------------

n1 equ d'1';d'13' ;定义一个外层循环廷时常数d'13'(10ms) n2 equ 0ffh ;定义一个内层廷时常数

RBCOUNST equ 0x1f ;rb0~rb4读取后异或常数

;------------------bit1-----------------------------

c equ 0 ;定义进位标志位位地址

rp0 equ 5 ;定义状态寄存器的页选位RP0

NOT_RBPU equ 7 ;定义选择寄存器RB的上拉电阻位RBPU z equ 2 ;定义0状态位的位地址

F_release EQU 0 ;

F_pressed equ 1 ;

;--------------FlagKey---bit2----------------------------

;#define F_release FlagKey,0 ;按键释放标志位

;#define F_pressed FlagKey,1 ;按键闭合标志位

;-------------Flag ----------------------------------

;Flag,0 ; 时间调整标志位

;Flag,1 ; FSR=21H=HourL

微机原理课程设计数字时钟程序

河北科技大学 课程设计报告 学生姓名:学号: 专业班级: 电子信息科学与工程 课程名称:微型计算机原理及应用 学年学期: 2 01 1 —2012 学年第1 学期 指导教师: 20 0 1 1年 1 2月 课程设计成绩评定表

目录 一、课设题目及目的………………………………….4 二、设计任务………………………………………….4 三、总框图及设计流程 (4) 四、?源程序清单 (6) 五、?调试结果及显示 (19) 六、?个人贡献………………………………………….19 七、课程设计总结及体会 (21) 一、课设题目及目的 实习题目:数字时钟程序 实习目的:通过实习,使我们进一步弄懂所学到的课本知识,巩固和深化对8086系统的指令系统、中断系统、键盘/显示系统、程序设计、应用开发等基本理论知识的理解,提高汇编语言应用于技术的实践操作技能,掌握汇编语言应用系统设计、研制的方法,培养利用科技革新、开发和创新的基本能力,为毕业后从事与其相关的工作打下一定的基础。

二、课设任务 本课题为利用汇编语言设置时钟程序,其显示效果为:截取系统时间,能以时、分、秒(其中时为24小时制)的形式显示,并且通过合理的操作能修改时和分的内容来修改时间。再有,可以给它设定一个ALARM时间,到这个时间它就能产生信号,起到定时作用,。除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx 月xx日。 ' *

DB '***********PRESS ESCBUTTON TO EXIT**************',0AH,0DH,'$' TN DB'PLEASE INPUT THE NEW TIME(HH:MM:SS):',0DH,0AH,'$' TMDB'PLEASE INPUT THE ALARM TIME (HH:MM:SS):',0DH,0AH,'$' MUSICMESS DB'PLEASE CHOOSE THE TYPE OF MUSIC:1(FAST) 2(MIDDLE) 3(SLOW)',0DH,0AH,'$' MESS2DB'TIME IS:',0AH,0DH,'$' MESS3DB 'TODAY IS:',0AH,0DH,'$' DBUFFER1DB20DUP('') T_BUFFD B 40 ;在数据段开一段时间显示缓冲区 DB ? DB 40DUP(?) HOR DB? MIN DB? SEC DB? TEMPHOR DB ? TEMPMIN DB? TEMPSEC DB? MUSIC DW 800;存放音乐的频率数DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODESEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: CALL CLEAR ;调用清屏子程序 DISPLAY:;时间显示部分 MOV AX,DATA MOVDS,AX MOVBX,OFFSETT_BUFF;送T_BUFF的偏移地址到BX MOV AH,2CH;调用DOS时间调用功能,功能号:2CH,小时,分钟,秒数分别保存在CH,CL,DH中 INT 21H ;判断时间是否相等SUB DH,1;秒数+1修正 CALL CHECK ;.........................................................................

数字时钟程序

#define uchar unsigned char #define unit unsigned int #include #include #include void 1cd_putchar(uchar 1cdchar) void 1cd_putsf(uchar code *chars) uchar code http[ ]={"current time is:"} sbit KEY1=P3^3; // sbit KEY2=p3^4; // ///////////////////////////////////////// uchar t50ms,ts,tm,th; uchar DISP_BUFFER[6]=0; void timer0(void) interrupt 1 using1 { THO=0x3c; TLO=0xbo; //50ms t50ms++; if(t50ms==20) { t50ms=0; ts++; if(ts==60) {tm=0; th++; if(th==24) {th=0; } } } } } void main (void) { p0=OXFF; P1=OXFF; P2=OXFF; P3=OXFF; TMOD=0X01;//T0 THO=0X3C; TLO=0XB0;//50ms EA=1 ETO=1; initialise();

1cd_setxy(0,0); 1cd_putsf(http); TRO=1; while(1) { DISP_BUFFER[0]=th/10; DISP_BUFFER[1]=th%/10; DISP_BUFFER[2]=tm/10; DISP_BUFFER[3]=tm%/10; DISP_BUFFER[4]=ts/10; DISP_BUFFER[5]=ts%/10; 1cd_setxy(1,0); 1cd_putchar(DISP_BUFFER[0]+0X30; 1cd_putchar(DISP_BUFFER[1]+0X30; 1cd_putchar(':'); 1cd_putchar(DISP_BUFFER[2]+0X30; 1cd_putchar(DISP_BUFFER[3]+0X30; 1cd_putchar(':'); 1cd_putchar(DISP_BUFFER[4]+0X30; 1cd_putchar(DISP_BUFFER[5]+0X30; if(!KEY1) {TM++; delay_ms(100);} } } //display one char void 1cd_putchar(uchar 1cdchar) { output(1cdchar); } //display a sting void 1cd_putsf(uchar code *chars) { uchar i=0; while(chars[i]>=0x20&chars[i]<0x7f) {if (i<0x0f) {output (chars[i]); i++; } else { 1cd_setxy(1,0); while( (chars[i]>0x20&chars[i]<0x7f) ) {output(chars[i]);

电子综合设计-基于单片机多功能数字时钟的设计(附完整程序)

课题:基于51单片机的多功能数字时钟系统设计 一、概述、设计思路 该设计方案是以MC51单片机为核心,采用LCD液晶屏幕显示系统,辅以闹钟模块,温度采集模块、日期提醒、键盘时间调整预设置等模块,所构建的数字时钟系统,能动态显示实时时钟的时、分、秒,数据显示(误差限制在30每天),对闹铃方式与温度调节模块进行了重点设计实现SB0、SB1、SB2、SB3四个键实现时钟正常显示,调时,及闹钟时间设置。本系统设计大部分功能有软件来实现,使电路简单明了,系统稳定性也得大大提高。 二、系统组成与工作原理 1、工作原理: 本设计采用STC89C51单片机作为本次课程设计的控制模块。单片机可把由DS18B20、DS1302、AT24C02中的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历和闹铃的显示。以LCD液晶显示器为显示模块,把单片机传来的的数据显示出来,并且显示多样化,在显示电路中,主要靠按键来实现各种显示要求的选择与切换。 2、总是设计框架图:

图二:系统总体电路图 三、单元电路的设计与分析 整个电子时钟系统电路可分为六大部分:中央处理单元(CPU)、复位电路部分、显示部分、键盘输入部分、温度采集部分。 1、MCS-51单片机 VCC: 89S51 电源正端输入,接+5V。 VSS: 电源地端。

XTAL1: 单芯片系统时钟的反相放大器输入端。 XTAL2: 系统时钟的反相放大器输出端,一般在设计上只要在XTAL1 和XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。 RESET: 89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。 EA/Vpp: "EA"为英文"External Access"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。 ALE/PROG: 端口3的管脚设置: P3.0:RXD,串行通信输入。 P3.1:TXD,串行通信输出。 P3.2:INT0,外部中断0输入。

数字电子时钟源程序

#include "2407c.h" //数字电子时钟按Key1启动、Key2暂停、Key3复位、Key4调时 #define disable() asm(" setc INTM") //禁止全局中断 #define enable() asm(" clrc INTM") //允许全局中断 unsigned int k=0,s=30,m=59,h=23,j=1; unsigned int d[8] = {0x0100,0x0200,0x030a,0x0400,0x0500,0x060a,0x0700,0x0800}; unsigned int w[8] = {0x0101,0x0204,0x030a,0x0400,0x0503,0x060a,0x0700,0x0804}; //系统初始化子程序 void chushihua (void) { asm (" clrc SXM"); //抑制符号位扩展 asm (" clrc OVM"); //累加器正常溢出 asm (" clrc CNF"); //B0被配置为数据存储空间 *WDCR=0x00E8; //关闭看门狗 *SCSR1=0X00FC; //CLKIN=10M,CLKOUT=CLK*4=40M *IMR=0x0002; //开INT2 *IFR=0xFFFF; //清全部中断,写1清0,参见P43 *MCRB=0xFE3C; //启用SPI功能引脚 *MCRA=0; //IOPA、IOPB配置为一般I/O功能 *MCRC=0; //IOPE、IOPF配置为一般I/O功能 *PFDATDIR=0x00FF; //IOPF设置为输入,并上拉 *SPICCR=0x0F; //SPI软复位、上升沿输出数据、16位数据长度 *SPICTL=0x0E; //禁止过冲中断、允许TALK(发送)数据、主机模式、禁止SPI中断//上升沿有延时 *SPIBRR=0x0F; //SPI波特率=SYSCLK/(SPIBRR+1)=2.5M *SPICCR=*SPICCR|0x80; //SPI恢复操作,准备发送、接收下一个字符 WSGR=0x00; //禁止所有的等待状态 } //延时子程序 void delay(unsigned int pp) { unsigned int k,i; for(k=0;k

数字时钟能修改程序

数字时钟可修改程序 //已验证可行,消抖效果一般 //4位动态显示数字时钟程序 #include #include //#include #define uchar unsigned char #define uint unsigned int // sbit dp0 =P2^4; sbit dp1 =P2^5; sbit dp2 =P2^6; sbit dp3 =P2^7; sbit spk =P1^1; //P3^5; bit set,ms,df; uchar cnt[3],dpt=0,dpbuf[4]; //全局变量定义 // //显示字模表 code uchar tab[]={0x18,0x7b,0x2c,0x29,0x4b,0x89,0x88,0x3b,0x08,0x09,0xef}; // void delay_10us(void) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } // 8 nop+ret=10 Cycle

// void timer0(void) interrupt 1 using 1 { //5mS timer interrupt // uchar k,j; TH0=0xee; //65536-4608 TL0=0x00; if(dpt<3) dpt++; else dpt=0; //动态显示计数器if(dpt==2) P0 = tab[dpbuf[dpt]]&0xf7; else P0 = tab[dpbuf[dpt]]; switch(dpt) { case 0: dp1 = dp2 = dp3 = 1; dp0=0; break; case 1: dp0 = dp2 = dp3 = 1; dp1=0; break; case 2: dp0 = dp1 = dp3 = 1; dp2=0; break; case 3: dp0 = dp1 = dp2 = 1; dp3=0; } if(set) //设置时钟状态 { cnt[0]++; if(cnt[0]>=100) //0.5秒闪烁切换 { cnt[0]=0; //开始进入下个0.5秒计时

基于单片机的数字时钟程序

钟〔★〕这里用了两种编写方法(即汇编语言与C语言) (1.开机时,显示12:00:00的时间开始计时; (2.P0.0/AD0控制“秒”的调整,每按一次加1秒; (3.P0.1/AD1控制“分”的调整,每按一次加1分; (4.P0.2/AD2控制“时”的调整,每按一次加1个小时; 2.电路原理图 3.系统板上硬件连线 (1.把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上; (2.把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3.把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上; 4.相关基本知识 (1.动态数码显示的方法 (2.独立式按键识别过程 (3.“时”,“分”,“秒”数据送出显示处理方法 5.程序框图 6.汇编源程序 SECOND EQU 30H MINITE EQU 31H HOUR EQU 32H HOURK BIT P0.0 MINITEK BIT P0.1 SECONDK BIT P0.2 DISPBUF EQU 40H DISPBIT EQU 48H T2SCNTA EQU 49H T2SCNTB EQU 4AH TEMP EQU 4BH ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV SECOND,#00H MOV MINITE,#00H MOV HOUR,#12 MOV DISPBIT,#00H MOV T2SCNTA,#00H MOV T2SCNTB,#00H MOV TEMP,#0FEH LCALL DISP

数字电子时钟程序与仿真

数字电子时钟程序 【闹铃(持续5s),整点报时(几点报几下,每两下之间隔间2s,每声持续2s)】 程序: #include #include #define uchar unsigned char #define uint unsigned int //此表为LED 的字模, 共阴数码管0-9 - uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制 /*定义并初始化变量*/ sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; sbit buzz=P1^3; uchar mstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1 uchar seconde1=0; uchar bjcs; uchar minite1=0; uchar hour1=7; uchar seconde2=0; uchar minite2=0; uchar hour2=8; uchar temp1=0; uchar temp2=0; uchar count1,flag,temp; /*函数声明*/ void delay(uint z); //延时子程序 void time_pro( ); //时间处理子程序 void display(uchar hour,uchar minite,uchar seconde); //显示子程序 void keyscan( ); //键盘扫描子程序 void zhengdian(); void dinshi(); void delay(uint z) { uint x,y; for(x=0;x

51单片机数字时钟(带闹钟)

计算机硬件综合课程 设计报告 课目: 学院: 班级: 姓名: 指导教师: 目录 1.1 功能需求 1.2 设计要求 2.1 总体描述 2.2 系统总体框图 2.3 Proteus仿真电路图 3 软件设计流程及描述 3.1 程序流程图 3.2 函数模块及功能 4 心得体会 附:源程序 1 1.1功能需求 (1)实现数字时钟准确实时的计时与显示功能; (2)实现闹钟功能,即系统时间到达闹钟时间时闹铃响;

(3)实现时间和闹钟时间的调时功能; (4)刚启动系统的时候在数码管上滚动显示数字串(学号)。 1.2设计要求 (1)应用MCS-51单片机设计实现数字时钟电路; (2)使用定时器/计数器中断实现计时; (3)选用8个数码管显示时间; (4)使用3个按钮实现调时间和闹钟时间的功能。按钮1:更换模式(模式0:正常显示时间;模式1:调当前时间的小时;模式2;调当前 时间的分钟;模式3:调闹钟时间的小时;模式4:调闹钟时间的分 钟);按钮2:在非模式0下给需要调节的时间数加一,但不溢出; 按钮3:在非模式0下给需要调节的时间数减一,但不小于零; (5)在非0模式下,给正在调节的时间闪烁提示; (6)使用扬声器实现闹钟功能; (7)采用C语言编写程序并调试。 2.1总体描述 (1)单片机采用AT89C51型; (2)时间显示电路:采用8个共阴极数码管,P1口驱动显示数字,P2口作为扫描信号; (3)时间设置电路:P3.0、P3.1、P3.2分别连接3个按键,实现调模式,时间加和时间减; (4)闹钟:P3.3口接扬声器。 2.2系统总体框图 2.3Proteus仿真电路图 3 软件设计流程及描述 3.1 程序流程图

PIC16F887单片机LED数字钟程序

1.硬件原理图 2.印制板PCB图

3.硬件测试程序 用PIC16F887实验板,通过PIC3连接,进行在线调试和脱机运行,调试中遇到很多问题;经过我们的努力和老师的讲解我们成功攻克所有难题。程序如下: #include __CONFIG(0X03E4); __CONFIG(0X0700); #define uint unsigned int

#define uchar unsigned char uchar tab[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67};//七段数码管段码 uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef}; init(); disp(uint num1,uint num2,uint num3,uint num4,uint num5,uint num6); disp1(uint num7,uint num8,uint num9,uint num10,uint num11,uint num12);//闹钟 delay(uint x); uint i=0; int q=0,m=0,p=0; void KeyProcess(); #define K0 RB0 #define K1 RB2 #define K2 RB1 #define K3 RB3 #define BEEP RE0 uchar K1_FLAG=0; uint miao=0,mig=0,mis=0;

uint fen=0,fe=0,fn=0; uint shi=0,sh=0,si=0; uint miaoa=0,migb=0,misc=0;////闹钟uint fena=0,feb=0,fnc=0; uint shia=0,shb=0,sic=0; uchar a1,a2,a3,a4,a5,a6; main() { init(); TMR0=6; while(1) { if((q==0)||(q==1)) { mig=miao/10; //十位 mis=miao%10; //个位 fe=fen/10; //十位 fn=fen%10; //个位

001简易数字时钟软件详细制作过程

简易数字时钟软件详细制作过程 这是我自己用VS2010制作的简易数字时钟小软件,在制作过程中收获知识不少,希望和初学MFC编程的朋友分享一下。 一、其功能有一下三点: 1.打开软件后,其程序自动获取当前电脑系统的日期、时间和周次,并同步显示在主 对话框上; 2.点击“设置时间”按钮,弹出设置时间子对话框,在其中可以设置自己想设置的时 间(采用24小时格式制)。若输入的内容和格式都合法则主对话框显示此时间,并依此时间运行;若输入的内容和格式不合法则会弹出提示消息框。 3.点击“退出”按钮,则会弹出提示消息框,询问用户是否退出系统。

二、制作过程: 1.新建一个项目名为SetTime的MFC对话框应用程序,在主对话框的属性中修改其标题为“数字显示时间”。 2.在主对话框上添加3个静态文本控件、3个编辑框控件和2个按钮控件。在3个编辑框的属性中修改其ID分别为IDC_DATE、IDC_WEEK、IDC_TIME,编辑框文本都设置为居中显示,其中日期和周次编辑框属性设置为只读。2个按钮的ID分别修改为IDC_SETTIME、 IDC_EXIT; 3.在类向导中,选择类名CSetTimeDlg,在成员变量中通过添加变量为三个编辑框分别关联对应都为CString类型的变量m_Date、m_Week、m_Time,还要为IDC_DATE编辑框关联CEdit类的对象m_ShowDate;还要为CSetTimeDlg类自定义3个unsigned char类型的变量m_Hour、m_Minute、m_Second。

4.在CSetTimeDlg::OnInitDialog()函数的// TODO: 在此添加额外的初始化代码,其位置下方添加下列代码:

数字时钟完整程序

数字时钟完整程序(8位数码管显示) Protues仿真电路可从本页附件下载! /*基于单片机内部定时计数器的数字钟设计 1、用单片机内部定时计数器T0进行计时; 2、用8位数码管显示日期、时间; 3、用INT0所接按键进行日期/时间显示切换。Design:长沙民政职业技术学院,方跃春 */ #include #define uchar unsigned char //宏定义 #define uint unsigned int //宏定义 uchar temp=0;//定义定时器溢出计数变量,每隔50ms 产生1次溢出,temp加1 bit flag=0;//定义时间/日期显示切换标志 位,flag=0显示时间,flag=1显示日期 uchar year=11;//定义年变量并赋初值11年 uchar month=05,day=23;//定义月、日变量,并赋初值5月23日 uchar hour=12,minute=00,second=00;//定义时、分、秒变量,并赋初值12时00分00秒 uchar data month_day[12]={31,0,31,30,31,30,31,31,30,31,30

,31};//定义每月天数表 uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf 8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x 8e};//共阳七段码表 uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };//共阳位码表 /*--定时计数器T0及中断初始化函数--*/ void init_t0(void) { TMOD=0x01;//设置定时器T0为工作方式1 TH0=(65536-50000)/256;//赋T0高8位初值,定时50ms TL0=(65536-50000)%256;//赋T0低8位初值 EA=1;//开总中断 ET0=1;//开启定时器T0中断 TR0=1;//启动定时器T0 } /*--外部中断INT0初始化函数--*/ void init_int0(void)

基于eda数字钟程序设计

一、课题要求: (1)技术要求:1、掌握多功能数字钟的工作原理。 2、应用EDA技术,VHDL语言编写程序。 3、层次化设计,设计原理框图。 4,、硬件设计及排版。 (2)功能要求:1、基本功能:能进行正常的时、分、秒计时功能,分别 由6个数码管显示24小时、60分钟、60秒的计数器 显示。 2、扩展功能:(1)能够利用按键实现“校时”“校分” “清零”功能。 (2)能利用扬声器做整点报时,整点前 五秒短声,整点长声。 (3)本人工作:负责软件部分,,编写各部分模块的VHDL程序,并且锁定 引脚,将程序下载到芯片中。 二、设计方案: 原理框图: 数字钟原理框图 一共有11个小模块:分频,片选,按键,小时,分,秒,显示模块,七段显示译码器,报时,扬声,36译码器。 左边第一个是时钟信号输入端,50Mhz到分频模块。第二个为清零按键,第三个为校分按键,第四个为校时按键。 右边第一个为七段显示译码器输出端,第二个为扬声器输出端,第三个为6个数码管输出端。

中间模块为数字钟的核心,有计时,报时,校时功能。 三、单元模块设计 1、分频模块 该模块是将时钟脉冲50Mhz分频到1000、500和1,分别给报时模块和及时模块。

2、秒模块 仿真图

该模块为60进制计数器,有分频模块得到的1hz进行计时,计时输出为秒的数值,在计时到59时进位1到co端。当按下s3时,秒清零。 3.、分模块 仿真图

该模块也为60进制计数器,计时输出为分的数值。在EN信号有效且时钟来时,计数器加1、在s2按下时,EN使能端有效,实现校分功能。 4、时模块 仿真图 该模块为24进制计数器,计时输出为小时的数值,在EN信号到来时,计数器

(Verilog HDL)数字时钟设计

实验报告 课程名称:可编程逻辑器件与数字系统设计实验项目:数字时钟设计 专业班级: 姓名:学号: 实验室号:实验组号: 实验时间:批阅时间: 指导教师:成绩:

沈阳工业大学实验报告 专业班级:学号:姓名: 实验名称:数字时钟设计 1.实验目的: 熟悉Quartus II 6.0运行环境,掌握基本使用方法; 学会使用Quartus II编写程序,进行下载验证。 2.实验内容: (1)60进制计数器; (2)24进制计数器; (3)调用24进制和60进制计数器制作数字时钟。 3. 实验方案 (1)编写题目要求的程序; (2)按照要求将相关程序进行检测和调试,运行正确的程序; (3)程序完成后,将其与实验箱连接,并打开电源; (4)下载程序到芯片内; (5)观察程序功能是否成功实现。 4. 实验步骤或程序 详细过程见附录。 5.程序运行结果 运行结果如下图所示: 24进制计数器

首次运行程序时,没有任何出错状况;而在下载后,发现24进制计数器中的频率有些快,只要把频率的短路针调到1Hz 即可,没有其他问题。 附录A (24进制计数器) 1、功能实现与程序选择 24进制计数器是实现从0到23的计数。由此可以运用Verilog HDL 语言将此功能实现。 2、程序运行与调试 module count24(Rd,EN,CLK,Qh,Ql,C); input Rd,EN,CLK; output [3:0]Qh,Ql; output C; reg [3:0]Qh,Ql; reg C; 60进制计数器 6.出现的问题及解决方法

initial begin Qh=4'd0;Ql=4'd0;C=0; end always @ (posedge CLK) begin if(EN==1) begin if(Rd==0) begin Qh=4'd0;Ql=4'd0;C=0; end else if(Qh<4'd2&&Ql<4'd9) Ql=Ql+1; else if(Qh<4'd2&&Ql==4'd9) begin Qh=Qh+1;Ql=4'd0; end else if(Qh==4'd2&&Ql<4'd3) Ql=Ql+1; else begin Qh=4'd0;Ql=4'd0;C=0; end if(Qh==4'd2&&Ql==4'd3) C=1; end end endmodule 3、保存一个名称,建立一个和module模块的名称一致的工程并进行调试。

数字时钟C程序及仿真

数字时钟C程序及仿 真 -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

**************************************/ #include <> unsigned char code SEG7[12]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90,0xbf,0xff,}; unsigned short int tcount; //sbit set=P1^0; //sbit up=P1^1; //sbit down=P1^2; unsigned char DisSecondL,DisSecondH,DisMinutL,DisMinutH,DisHourL,DisHourH; //结构体变量 struct time { unsigned char second; unsigned char minute; unsigned char hour; }time1; //延时子程序 void delay(k) unsigned int k; { unsigned char j; while((k--)!=0) for(j=0;j<125;j++); } //时钟调整子程序 TimeUpDown(n,x,y) unsigned char n,x,y; { if(up==0) { delay(50); //消除抖动 if(up==0) { n++; if(n==x)//上限越界显示为0 n=0;

while(up==0); } } if(down==0) { delay(50); if(down==0) { if(n==0)//下限越界显示为最大可显示 n=y; else n--; while(down==0); } } return n;//返回调整后的值 } */ //显示子程序 void display(DisSecondL,DisSecondH,DisMinutL,DisMinutH,DisHourL,DisHourH) { // 日日日日日日 // 1 2 3 4 5 6 // hH hL mH mL sH sL // 01 02 04 08 10 20 P2=0x00; P0=SEG7[DisSecondL]; //显示秒钟的个位 P2=0x20; delay(3); P2=0x00; P0=SEG7[DisSecondH]; //显示秒钟的十位 P2=0x10; delay(3); P2=0x00; P0=SEG7[DisMinutL]; //显示分钟的个位 P2=0x08;

51单片机带字库液晶12864ds1302数字时钟c源程序(无按键修改功能)

51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)过两天的搜索与调试,在别人程序的基础上,不断修改,终于调试成功了这个程序。目前还不能修改时间与日期,只是以预定时间以始。 适用于开发板:51单片机(AT89S52)+带字库液晶 12864(ST7920)+DS1302(实时时钟) 实现功能: 简单,数字时钟+日期(以后会不断完美)。 C语言源程序如下: #include #include #define uchar unsigned char #define uint unsigned int /*DS1302端口设置*/ sbit SCK=P3^6; //DS1302时钟 sbit SDA=P3^4; //DS1302 IO sbit RST = P3^5; // DS1302复位 bit ReadRTC_Flag; //读DS1302全局变量 /* 12864端口定义*/ #define LCD_data P0 //带字库液晶12864数据口 sbit LCD_RS = P2^4; //寄存器选择输入 sbit LCD_RW = P2^5; //液晶读/写控制

sbit LCD_EN = P2^6; //液晶使能控制 sbit PSB=P2^1; //并口控制 sbit RES=P2^3; uchar code dis1[] = {"电子设计天地"}; //液晶显示的汉字uchar code dis2[] = {"有志者,事竟成!"}; uchar code dis4[] = {'0','1','2','3','4','5','6','7','8','9'};unsigned char temp; #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; void lcd_pos(uchar X,uchar Y); //确定显示位置 unsigned char l_tmpdate[7]={0,7,16,19,10,1,9};//秒分时日月周年09-10-19 16:07:00 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}; void Write_Ds1302_byte(unsigned char temp); void Write_Ds1302( unsigned char address,unsigned char dat );unsigned char Read_Ds1302 ( unsigned char address ); void Read_RTC(void);//read RTC void Set_RTC(void); //set RTC void InitTIMER0(void);//inital timer0 /***************************************************************** **//*

电子时钟程序设计

电子时钟程序设计(总7页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

1.设计目的 电子时钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。电子时钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究电子时钟及扩大其应用,有着非常现实的意义。2.设计内容 2.1设计思想 针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及 80C51引脚结构。这样,既能做到经济合理又能实现预期的功能。

在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。程序可分为闹钟的声音程序、显示程序、闹钟显示程序、调时显示、定时程序。运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

数字时钟c语言程序

本人为单片机初学者,这是本人制作的一个简单的数字时钟程序,程序比较繁琐,只适合初学者学习参考使用,因为程序都是一步步来的,没有跳跃。只要将此程序复制到keil,然后编译生成hex文件,连到单片机(实物)就可以直接显示了。希望对有些人有帮助 #include//头文件 #define uchar unsigned char #define uint unsigned int//宏定义 uchar count; uint hour,minute,second; uint hour1=0,minute1=0; sbit dula=P2^6; sbit wela=P2^7;

sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; sbit key5=P3^4; sbit key6=P3^5; sbit key7=P3^6; sbit BEEP=P1^2; uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d ,0x07,0x7f,0x6f,0x40};//0-9,横杆 uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f}; //扫描 void delay(uint z)//延时函数 { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void init()//初始化中断 { TMOD=0x10; //定时器1以方式1定时TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;//总中断打开 ET1=1;//打开定时中断 TR1=1;//打开定时器 } void time1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; count++; if(count==20)//1秒累加一次 { count=0; second++;

PLC的数字电子钟毕业设计

XX职业技术学院毕业论文(设计) 开题报告书 开题时间:2012年10月10号 学生姓名XXX 专业班级11级电气自 动化2班 指导教师张XX 课题名称基于PLC的数字电子钟设计课题来源教师命题1.课题研究的意义及现状分析: 可编程控制器(PLC)是以微处理为核心的通用工业控制装置,它将传统的继电器--接触器控制系统与计算机控制技术紧密结合,集计算机、控制、通信于一体,为工业自动化提供了几乎完美的现代化自动控制装置。 近几年,可编程控制器由于其优良的控制性能,极高的可靠性,在各行各业中的应用日益广泛普及。为此,各高校的电器自动化、电气工程、供用电技术、机电一体化等相关专业相继开设了有关可编程控制器原理及应用的课程。 本设计以西门子公司的S7—200CN为基础,设计了PLC电子时钟的梯形图。 本设计共分四大章:第一章是基础部分,介绍了PLC的概述说明了PLC的发展史。第二章主要是数字电子钟设计的软件介绍及应用。第三章是数字电子钟的设计程序,进一步清楚的了解其内部结果和工作原理。第四章是针对本设计在制作过程所参考文献及资料的统一说明及介绍。最后是对指导老师及在本设计过程当中给予我们帮助的老师及领导的感谢。

2.课题拟采用的方案和技术路线: 本课题设计方案为:数控部分用PLC带动数模转换芯片提供PLC自身具有完善的功能线拟采用的技术路线: (1)采用PLC作为整机的控制单元,利用4×4键盘输入数字量,通过控制单元输出数字信号。 (2)经过D/A转换器(DA0832)输出模拟量。 (3)经过运算放大器隔离放大,控制输出功率管的基极,随着输出功率管的基极电压的变化,间接地改变输出电压的大小。 3.课题计划及进度安排: 01~02周:查寻收集资料,了解单片机原理,引脚及参数功能,学习与掌握PLC线路模版的设计,为毕业设计打下基础,并写出开题报 告。 03~04周:确定控制方案,构思硬件电路。 05~06周:毕业实习,每天写实习日志,实习结束后写出实习报告。 07~10周:绘制PLC的版图以及设计出软件程序,并进行上机调试。 11~12周:撰写毕业设计说明书(毕业论文),打印装订说明书,准备毕业答辩。 1.参考文献 1 胡学林可编程控制器教程北京电子工业出版社。 2 廖常初S7—200PL编程及应用北京机械工业出版社。 3 康华光电子技术基础模拟部分(第四版).高等教育出版社,1999。 4 康华光电子技术基础数字部分(第四版).高等教育出版社,2000。 5 李振声实验电子技术.国防工业出版社,2001。 6 任为民电子技术基础课程设计.中央广播电视大学出版社,1997。 7 钟肇新范建东可编程控制器原理及应用.广州:华南理工大学出版社,2003。

相关主题
文本预览
相关文档 最新文档