文档库 最新最全的文档下载
当前位置:文档库 › 基于STC89C52多功能电子时钟系统程序+原理图

基于STC89C52多功能电子时钟系统程序+原理图

基于STC89C52多功能电子时钟系统程序+原理图
基于STC89C52多功能电子时钟系统程序+原理图

一、设计任务

设计制作一台以控制器为核心的多功能电子时钟系统

二、设计要求:

①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。(PC主机端可利用高级语言进行人机界面设计)

②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。

③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。高音频率为1KHz;

④.在系统校准模式时,系统具有快速校准时间的功能。

⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。

⑥.系统显示器采用LCD液晶显示器1602或其它显示器件,并采用键盘对相关数据进行设置与操作。

原理图

设计制作一台以控制器为核心的多功能电子时钟系统

二、设计要求:

①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。(PC主机端可利用高级语言进行人机界面设计)

(注:此三种模式可以通过SET键盘来回切换,在正常时钟模式,第二排显示S:time,校准模式显示S:adjst,秒表模式,是TN~T3:四个秒表模式);

②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。

(注:这个已经全部显示了,含星期)

③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。高音频率为1KHz;

(注:这个都实现了,要验证的话就是将时钟调整到59分后验证即可)

④.在系统校准模式时,系统具有快速校准时间的功能。

(注:按SET键进入校正模式可以对时钟进行校正,UP向上,DOWN键向下,按STOP键保存退出,遗憾的是,这个正在调节的参数无法反白显示)

⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。

(注:按SET键进入秒表模式,按0K键启动,STOP键清零,按UP键记录,可以对100ms的定时器开始计时,最大999.9秒,按下UP键盘,则记录一个,总共记3个,T1-T3,按SET键退出)

⑥.系统显示器采用LCD液晶显示器1602或其它显示器件,并采用键盘对相关数据进行设置与操作。

乖乖,真的是1602显示的啊。

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

/*File Name: main.c */

/*Function : The entrance of all fuctions */

/*Author : WuYingjian */

/*V ersion : V1.0 */

/*Date : 2012.11.03 */

/* All Rights Reserved. */

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

#include

#include

#define uint unsigned int

#define uchar unsigned char

#define nop _nop_

void write_command(uchar tempdata);

/*引脚定义*/

sbit BusyFlag=P0^7;

sbit ALARM_BEEP = P2^4; //报警喇叭

//LCD控制接口

sbit E=P2^5;

sbit RW=P2^6;

sbit RS=P2^7;

//DS1302数据接口

sbit rst=P3^4;

sbit sclk=P3^2;

sbit io=P3^3;

//KEY输入接口

sbit KEY_OK=P1^0;

sbit KEY_STOP=P1^1;

sbit KEY_UP=P1^2;

sbit KEY_SET=P1^3;

sbit KEY_DOWN=P1^4;

sbit bit7=ACC^7; //单片机内部移位寄存器ACC声明;

sbit bit0=ACC^0;

//显示界面LCD1602

uchar LCD_4,LCD_3,LCD_2,LCD_1,LCD_0;

uchar code LCDData[] ="0123456789";

uchar code dot_tab[] ="0112334456678899";

uchar first_line[16]="2012-09-24 WEEK1"; //LCD第一行显示缓存数组

uchar second_line[16]="11:13:25 S:time"; //LCD第二行显示缓存数组,正常显示时间。

//函数等变量

uchar set_sel;

uint systimer_10ms,systimer1_10ms,systimer_1s,systimer_1m;

uchar alarm_beep=0,alarm_flag=0; //设定报警标志.

uint dingshi_timer,dingshi_flag_up=0,dingshi_flag_down,dingshi_flag;

uint write_time1,write_time2,write_time3; //999.9秒。

uchar time[7];

uchar ok_value,ii,ix,temp;

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

//延时程序

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

void delay(unsigned int N)

{

unsigned int i;

for(i=0;i

}

void Time0_init(void) //定时器初始化

{

TMOD=0x01; //定时器设置

TH0=(65536-50000)/256; //定时器0赋初值

TL0=(65536-50000)%256;

EA=1; //开总中断

ET0=1; //开定时器0中断

TR0=1; //开始计数

}

void t0(void) interrupt 1 using 1 //定时器0中断服务子程序{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

systimer_10ms++;

systimer1_10ms++;

if(systimer_10ms>=200)

{

systimer_1s++;

systimer_10ms=0;

}

if(systimer1_10ms>=20) //也为100ms,即0.1S的精度.

{

if(set_sel==2)

{

if(dingshi_flag)

{

dingshi_timer++;

if(dingshi_timer>=9999)

{dingshi_timer=0;}

if((dingshi_flag_up==1)&&(KEY_UP==0))

{

write_time1 = dingshi_timer;

}

if((dingshi_flag_up==2)&&(KEY_UP==0))

{

write_time2 = dingshi_timer-write_time1;

}

if((dingshi_flag_up==3)&&(KEY_UP==0))

{

write_time3 = dingshi_timer-write_time2-write_time1;

}

}

if(KEY_STOP==0)

{dingshi_flag=0;dingshi_timer=0;dingshi_flag_up=0;write_time1=write_time2=write_time3 =0;}

}

}

}

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

//LCD1602测忙

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

void check_busy(void)

{

while(1)

{

P0=0xff;

E=0;

_nop_();

RS=0;

_nop_();

_nop_();

RW=1;

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

_nop_();

if((P0&0x80)==0)

{

break;

}

E=0;

}

}

//************************************ //LCD1602写命令

//************************************ void write_command(uchar tempdata)

{

E=0;

_nop_();

_nop_();

RS=0;

_nop_();

_nop_();

RW=0;

P0=tempdata;

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

E=0;

_nop_();

_nop_();

check_busy();

}

//************************************ //LCD1602写数据

//************************************ void write_data(uchar tempdata)

{

E=0;

_nop_();

_nop_();

RS=1;

_nop_();

_nop_();

RW=0;

P0=tempdata;

_nop_();

E=1;

_nop_();

_nop_();

E=0;

_nop_();

_nop_();

check_busy();

}

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

//初始化LCD1602

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

void init_lcd1602()

{

write_command(0x01); //清除屏幕

write_command(0x38); //功能设定(8位,2行,5*7点阵式)write_command(0x0c); //显示器ON,光标OFF,闪烁OFF write_command(0x06); //地址加1

delay(5);

}

void display(void)

{

uchar i;

write_command(0x80);

for(i=0;i<16;i++)

{

write_data(first_line[i]);

}

write_command(0xc0);

for(i=0;i<16;i++)

{

write_data(second_line[i]);

}

}

/*DS1302的操作*/

#define uint unsigned int

#define uchar unsigned char

#define nop _nop_

#define SECOND 0

#define MINUTE 1

#define HOUR 2

#define DAY 3

#define MONTH 4

#define WEEK 5

#define YEAR 6

//#include"font.h"

//#include"intrins.h"

//#include "lcd12864.h"

//向DS1302某地址写1字节的数据/命令void write_B(uchar addr,uchar ucda)

{

uchar i,temp;

sclk=0;

rst=0;

nop();

rst=1;//打开数据传送

for(i=0;i<8;i++) //写命令8位

{

sclk=0;

temp=addr;

io=(bit)(temp&0x01);

addr>>=1;

sclk=1; //上升沿写入

nop();

nop();

}

for(i=0;i<8;i++) //写数据8位

{

sclk=0;

temp=ucda;

io=(bit)(temp&0x01);

ucda>>=1;

sclk=1; //上升沿写入

nop();nop();

}

rst=0;

}

//从ds1302某地址读数据

/*在最后一个数据发送完了后,该脉冲的

下降沿就会输出数据的第一位!*/

uchar read_B(uchar addr)

{

uchar i,temp,dat1,dat2;

rst=0;

sclk=0;

rst=1;

for(i=0;i<8;i++)

{

sclk=0;

temp=addr;

io=(bit)(temp&0x01);

addr>>=1;

sclk=1; //上升沿写入

nop();

}

for(i=0;i<8;i++)

{

bit7=io;

sclk=1; //下降沿读取数据

sclk=0;

nop();

ACC>>=1;

}

rst=0;

dat1=ACC; //BCD与十六进制转化

dat2=dat1/16;

dat1=dat1%16;

dat1=dat1+dat2*16;

return dat1;

}

//设置ds1302的时间

/* 秒,分,时,日,月,周,年注意顺序;

sel= 0 1 2 3 4 5 6*/

/*

void set_1302(uchar sel,uchar newdate) //newdate是十进制,要转化为BCD {

uchar temp,ge,shi;

temp=newdate;

shi=temp/10;

ge=temp%10;

newdate=(shi<<4)&0xf0+ge;

write_B(0x8e,0x00); //关闭写保护

write_B(0x80+sel*2,temp); //这里的newdate已是BCD了

write_B(0x8e,0x80); //允许写保护

}

*/

//从ds1302读出1字节的数据显示到屏幕x,y上;

/* 秒,分,时,日,月,周,年

sel= 0 1 2 3 4 5 6 */

//2012-09-21 WEEK1 23-56-89

//23:23:23 S: 01:34:67

void dis_1302(uchar sel)

{

uchar shi,ge,temp,num;

temp=read_B(0x81+sel*2); //读的是BCD码

//BCD要转化为十进制

num=((temp&0x70)>>4)*10+(temp&0x0f);//num为十进制

shi=num/10;

ge=num%10;

if(sel==0) //秒

{

LCD_0=LCDData[shi];

LCD_1=LCDData[ge];

second_line[6]=LCD_0;

second_line[7]=LCD_1;

if((num>49)&&(alarm_flag)) //时钟整点报时响应.....

{

if((num==50)||(num==52)||(num==54)||(num==56)||(num==58))

{ALARM_BEEP=0;}

if((num==51)||(num==53)||(num==55)||(num==57))

{ALARM_BEEP=1;}

if(num==59)

{

ALARM_BEEP=0;

delay(5);

ALARM_BEEP=1;

delay(5);}

}

}

if(sel==1) //分

{

if(num==59)

{alarm_flag=1;}

else{alarm_flag=0;} LCD_0=LCDData[shi]; LCD_1=LCDData[ge]; second_line[3]=LCD_0; second_line[4]=LCD_1;

}

if(sel==2)//时

{

LCD_0=LCDData[shi]; LCD_1=LCDData[ge]; second_line[0]=LCD_0; second_line[1]=LCD_1;

}

if(sel==3)//日

{

LCD_0=LCDData[shi]; LCD_1=LCDData[ge]; first_line[8]=LCD_0; first_line[9]=LCD_1;

}

if(sel==4)//月

{

LCD_0=LCDData[shi]; LCD_1=LCDData[ge]; first_line[5]=LCD_0; first_line[6]=LCD_1;

}

if(sel==5)//周

{

LCD_0=LCDData[ge]; first_line[15]=LCD_0-1; }

if(sel==6)//年

{

LCD_0=LCDData[shi]; LCD_1=LCDData[ge]; first_line[2]=LCD_0; first_line[3]=LCD_1;

}

display();

}

//WEEK15

//在ds1302中读星期值

/*

void dis_1302_xingqi()

{

uchar ge,temp,num;

temp=read_B(0x81+WEEK*2); //读的是BCD码

//BCD转化为十进制

num=((temp&0x70)>>4)*10+(temp&0x0f);//num为十进制ge=num%10; //星期的十位是0,所以可以只考虑个位

}

*/

//初始化DS1302

void ds1302_init(void)

{

write_B(0x8e,0x00); //禁止写保护

/*初始化日期、月份等不能设为0;*/

/* write_B(0x80,0x00); //秒位初始化

write_B(0x82,0x01); //分钟初始化

write_B(0x84,0x01); //小时初始化

write_B(0x86,0x01); //日数初始化

write_B(0x88,0x01); //月份初始化

write_B(0x8a,0x04); //星期初始化

write_B(0x8c,0x09); //年份初始化

*/

write_B(0x8e,0x80); //允许写保护

}

void set_sys_param(void) //进行时钟校正模式或者秒表模式. {

switch(set_sel)

{

case 1: //进入校正时间模式

{

//以下是框架.

first_line[0]='2';

first_line[1]='0';

first_line[4]='-';

first_line[7]='-';

first_line[11]='W';

first_line[12]='E';

first_line[13]='E';

first_line[14]='K';

second_line[2]=':';

second_line[5]=':';

second_line[9]='S';

second_line[10]=':';

second_line[11]='a';

second_line[12]='d';

second_line[13]='j';

second_line[14]='s';

second_line[15]='t';

//从ds1302读出1字节的数据显示到屏幕x,y上;

/* 秒,分,时,日,月,周,年

i = 0 1 2 3 4 5 6 */

for( ii=0;ii<7;ii++) //停止DS1302的计时.

{

temp=read_B(0x81+ii*2); //读的是BCD码

time[ii]=((temp&0x70)>>4)*10+(temp&0x0f);//转化为十进制

}

while(1)

{

switch(ok_value)

{

case 0: //miao

{

LCD_0=LCDData[time[6]/10%10]; //年

LCD_1=LCDData[time[6]%10];

first_line[2]=LCD_0;

first_line[3]=LCD_1;

display();

}break;

case 1:

{

LCD_0=LCDData[time[4]/10%10]; //月

LCD_1=LCDData[time[4]%10];

first_line[5]=LCD_0;

first_line[6]=LCD_1;

display();

}break;

case 2:

{

LCD_0=LCDData[time[3]/10%10]; //日

LCD_1=LCDData[time[3]%10];

first_line[8]=LCD_0;

first_line[9]=LCD_1;

display();

}break;

case 3:

{

LCD_0=LCDData[time[5]%10]; //周

first_line[15]=LCD_0;

display();

}break;

case 4:

{

LCD_0=LCDData[time[2]/10%10]; //hours

LCD_1=LCDData[time[2]%10];

second_line[0]=LCD_0;

second_line[1]=LCD_1;

display();

}break;

case 5:

{

LCD_0=LCDData[time[1]/10%10]; //minutes

LCD_1=LCDData[time[1]%10];

second_line[3]=LCD_0;

second_line[4]=LCD_1;

display();

}break;

case 6:

{

LCD_0=LCDData[time[0]/10%10]; //seconds

LCD_1=LCDData[time[0]%10];

second_line[6]=LCD_0;

second_line[7]=LCD_1;

display();

}break;

}//END OK_V ALUE;

if(KEY_UP==0)

{ switch(ok_value)

{

case 0:// 年

time[6]++;

if(time[6]>99)time[6]=0;

break;

case 1:// 月

time[4]++;

if(time[4]>12)time[4]=1;

break;

case 2:// 日

time[3]++;

if(time[3]>31)time[3]=1;

break;

case 3:// 星期

time[5]++;

if(time[5]>7)time[5]=1;

break;

case 4:// 时

time[2]++;

if(time[2]>23)time[2]=0;

break;

case 5:// 分

time[1]++;

if(time[1]>59)time[1]=0;

break;

case 6:// 秒

time[0]++;

if(time[0]>59)time[0]=0;

break;

}

while(!KEY_UP); //等待松手

}

if(KEY_DOWN==0)

{ switch(ok_value)

{

case 0:// 年

time[6]--;

if(time[6]<=0)time[6]=99;

break;

case 1:// 月

time[4]--;

if(time[4]<=0)time[4]=12;

break;

case 2:// 日

time[3]--;

if(time[3]<=0)time[3]=31;

break;

case 3:// 星期

time[5]--;

if(time[5]<1)time[5]=7;

break;

case 4:// 时

time[2]--;

if(time[2]<=0)time[2]=23;

break;

case 5:// 分

time[1]--;

if(time[1]<=0)time[1]=59;

break;

case 6:// 秒

time[0]--;

if(time[0]<=0)time[0]=59;

break;

}

while(!KEY_DOWN); //等待松手

}

if(KEY_STOP ==0)

{

set_sel=2;

for(ix=0;ix<7;ix++) //写新时间到1302

{

temp=((time[ix]/10)<<4)+time[ix]%10;

write_B(0x80+ix*2,temp);

}

break;

while(!KEY_STOP);

}

if(KEY_SET==0)

{

ok_value++;

if(ok_value>6)

{ok_value=0;}

while(!KEY_SET);

}

}//END WHILE

}break;

case 2: //进入秒钟计时模式,并使用KEY_OK启动,KEY_STOP清零,KEY_UP记录。KEY_SET退出.启动定时器0

{

if(KEY_OK==0)

{

dingshi_flag=1;

}while(!KEY_OK);

if(KEY_UP==0)

{

dingshi_flag_up++;

while(!KEY_UP);

}

//第一排显示字符

first_line[0]='T';

first_line[1]='N';

first_line[2]=':';

LCD_3=LCDData[dingshi_timer/1000%10];

LCD_2=LCDData[dingshi_timer/100%10];

LCD_1=LCDData[dingshi_timer/10%10];

LCD_0=LCDData[dingshi_timer%10];

first_line[3]=LCD_3;

first_line[4]=LCD_2;

first_line[5]=LCD_1;

first_line[6]='.';

first_line[7]=LCD_0;

display();

LCD_3=LCDData[write_time1/1000%10];

LCD_2=LCDData[write_time1/100%10];

LCD_1=LCDData[write_time1/10%10];

LCD_0=LCDData[write_time1%10];

first_line[8]='T';

first_line[9]='1';

first_line[11]=LCD_3;

first_line[12]=LCD_2;

first_line[13]=LCD_1;

first_line[14]='.';

first_line[15]=LCD_0;

display();

LCD_3=LCDData[write_time2/1000%10];

LCD_2=LCDData[write_time2/100%10];

LCD_1=LCDData[write_time2/10%10];

LCD_0=LCDData[write_time2%10];

//第二排显示字符

second_line[0]='T';

second_line[1]='2';

second_line[2]=':';

second_line[3]=LCD_3;

second_line[4]=LCD_2;

second_line[5]=LCD_1;

second_line[6]='.';

second_line[7]=LCD_0;

display();

LCD_3=LCDData[write_time3/1000%10];

LCD_2=LCDData[write_time3/100%10];

LCD_1=LCDData[write_time3/10%10];

LCD_0=LCDData[write_time3%10];

second_line[8]='T';

second_line[9]='3';

second_line[10]=':';

second_line[11]=LCD_3;

second_line[12]=LCD_2;

second_line[13]=LCD_1;

second_line[14]='.';

second_line[15]=LCD_0;

display();

if(KEY_SET ==0)

{

set_sel=0;

first_line[0]='2';

first_line[1]='0';

first_line[2]=' ';

first_line[3]=' ';

first_line[4]='-';

first_line[5]=' ';

first_line[7]='-';

first_line[8]=' ';

first_line[9]=' ';

first_line[10]=' ';

first_line[11]='W';

first_line[12]='E';

first_line[13]='E';

first_line[14]='K';

first_line[15]=' ';

//第二排显示字符

second_line[0]=' ';

second_line[1]=' ';

second_line[2]=':';

second_line[3]=' ';

second_line[4]=' ';

second_line[5]=':';

second_line[6]=' ';

second_line[7]=' ';

second_line[8]=' ';

second_line[9]=' ';

second_line[10]='S';

second_line[11]=':';

second_line[12]='t';

second_line[13]='i';

second_line[14]='m';

second_line[15]='e';

while(!KEY_SET);

}

}

}

}

void main()

{

uchar sel;

ALARM_BEEP=1;//关闭喇叭响声.使用PNP管驱动.

init_lcd1602();

ds1302_init();

Time0_init();

for(;;)

{

if(set_sel==0)

{

if(KEY_SET==0)

{set_sel=1;write_command(0x01);//清除屏幕数值.

}while(!KEY_SET);

for(sel=0;sel<7;sel++) //显示DS1302的时间。

{

dis_1302(sel);

}

}

else

{

if(KEY_SET ==0)

{

set_sel++;

if(set_sel>2)

{set_sel=0;}

while(!KEY_SET);

}

set_sys_param();

}

}

}

数字电路电子时钟课程设计

数字电路电子时钟课程设计 整个数字钟由时间计数电路、晶体振荡电路、校正电路、整点报时电路组成。 其中以校正电路代替时间计数电路中的时、分、秒之间的进位,当校时电路处于正常输入信号时,时间计数电路正常计时,但当分校正时,其不会产生向时 进位,而分与时的校位是分开的,而校正电路也是一个独立的电路。电路的信 号输入由晶振电路产生,并输入各电路 方案论证:方案一数字电子钟由信号发生器、“时、分、秒”计数器、译码 器及显示器、校时电路、整点报时电路等组成。秒信号产生器是整个系统的时 基信号,它直接决定计时系统的精度,一般用555构成的振荡器加分频器来实现。 优点:数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械 式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。 方案二秒、分计数器为60进制计数器,小时计数器为24进制计数器。 实现这两种模数的计数器采用中规模集成计数器74LS90构成。 优点:简单易懂,比较好调试。 1 设计原理数字电子钟由信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路等组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用555构成的振荡器加分频器来实现。将标 准秒脉冲信号送入“秒计数器”,该计数器采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分,发出一个“时脉冲”信号,该信号将被 送到“时计数器”。“时计数器”采用24进制计数器,可以实现一天24h的累计。译码显示电路将“时、分、秒”计数器的输出状态经七段显示译码器译码,通 过六位LED显示器显示出来。整点报时电路是根据计时系统的输出状态产生一

STC89C52单片机详细介绍

STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL 搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。 单片机总控制电路如下图4—1: 图4—1单片机总控制电路 1.时钟电路 STC89C52内部有一个用于构成振荡器的高增益反相放大器,引

脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图4—2(a) 所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。 外部方式的时钟电路如图4—2(b)所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。 示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。 RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。

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

河北科技大学 课程设计报告 学生姓名:学号: 专业班级: 电子信息科学与工程 课程名称:微型计算机原理及应用 学年学期: 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 ;.........................................................................

单片机开发板的制作步骤

单片机开发板的制作步骤 单片机技术自发展以来已走过了近20年的发展路程。单片机技术的发展以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表现出较微处理器更具个性的发展趋势。小到遥控电子玩具,大到航空航天技术等电子行业都有单片机应用的影子。针对单片机技术在电子行业自动化方面的重要应用,为满足广大学生、爱好者、产品开发者迅速学会掌握单片机这门技术,于是产生单片机实验板普遍称为单片机开发板、也有单片机学习板的称呼。比较有名的例如电子人DZR-01A单片机开发板。 单片机开发板是用于学习51、STC、AVR型号的单片机实验设备。根据单片机使用的型号又有51单片机开发板、STC单片机开发板、AVR单片机开发板。常见配套有硬件、实验程序源码、电路原理图、电路PCB图等学习资料。例如电子人单片机开发板,针对部分学者需要特别配套有VB上位机软件开发,游戏开发等教程学习资料。开发此类单片机开发板的公司一般提供完善的售后服务与技术支持。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。 单片机(Microcontrollers)诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8051,此后在8051上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。 而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。高端的32位Soc单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。 常见配套资源如下:

数字电子时钟设计

电子技术课程设计 数字电子时钟的设计 摘要: 设计一个周期为24小时,显示满刻度为23时59分59秒,具有校时功能和报时功能的电子钟。本系统的设计电路由时钟译码显示电路模块、脉冲逻辑电路模块、时钟脉冲模块、整电报时模块、校时模

块等部分组成。计数器采用异步双十进制计数器74LS90,发生器使用石英振荡器,分频器4060CD及双D触发器74LS74D,整电报时电路用门电路及扬声器构成。 一、设计的任务与要求 电子技术课程设计的主要任务是通过解决一,两个实际问题,巩固和加深在“模拟电子技术基础”和“数字电子技术基础”课程中所学的理论知识和实验技能,基本掌握常用电子电路的一般设计方法,提高电子电路的设计和实验能力,为以后从事生产和科研工作打下一定的基础。电子技术课程设计的主要内容包括理论设计、仿真实验、安装与调试及写出设计总结报告。衡量课程设计完成好坏的标准是:理论设计正确无误;产品工作稳定可靠,能达到所需要的性能指标。 本次课程设计的题目是“多功能数字电子钟电路设计”。要求学生运用数字电路,模拟电路等课程所学知识完成一个实际电子器件设计。 二、设计目的 1、让学生掌握组合逻辑电路、时序逻辑电路及数字逻辑电路系统 的设计、安装、测试方法; 2、进一步巩固所学的理论知识,提高运用所学知识分析和解决实 际问题的能力; 3、提高电路布局﹑布线及检查和排除故障的能力; 4、培养书写综合实验报告的能力。

三、原理方框图如下 1、图中晶体振荡电路由石英32.768KHZ及集成芯。 2、图中分频器4060BD芯片及D触发器构成分频器。 3、计数器由二——五——十73LS90芯片构成。 4、图中DCD_HEX显示器用七段数码显示器且本身带有译码器。 5、图中校时电路和报时电路用门电路构成。 四、单元电路的设计和元器件的选择 1、十进制计数电路的设计 74LS90集成芯片是二—五—十进制计数器,所以将INB与QA 相连;R0(1)、R0(2)、R9(1)、R9(2)接地(低电平);INA

数字时钟程序

#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]);

数字逻辑课程设计 数字电子钟

课程设计(综合实验)报告 题目:第四个实验数字电子钟院系:计算机科学系 班级:计算计科学与技术1班学号: 学生姓名: 队员姓名: 指导教师:

《数字逻辑》综合实验 任务书 一、目的与要求 1 目的 1.1综合实验是教学中必不可少的重要环节,通过综合实验巩固、深化和扩展学生的理论知识与初步的专业技能,提高综合运用知识的能力,逐步增强实际工程训练。 1.2注重培养学生正确的设计思想,掌握综合实验的主要内容、步骤和方法。 1.3培养学生获取信息和综合处理信息的能力、文字和语言表达能力以及协作工作能力。 1.4提高学生运用所学的理论知识和技能解决实际问题的能 及其基本工程素质。 2.要求 2.1 能够根据设计任务和指标要求,综合运用电子技术课程中所学到的理论知识与实践技能独立完成一个设计课题。 2.2根据课题需要选择参考书籍,查阅手册、图表等有关文献资料。要求通过独立思考、深入钻研综合实验中所遇到的问题,培养自己分析、解决问题的能力。 2.3进一步熟悉常用电子器件的类型和特性,掌握合理选用的原则。 2.4学会电子电路的安装与调试技能,掌握常用仪器设备的正确

使用方法。利用“观察、判断、实验、再判断”的基本方法,解决实验中出现的问题。 2.5学会撰写综合实验总结报告。 2.6通过综合实验,逐步形成严肃认真、一丝不苟、实事求是的工作作风和科学态度,培养学生树立一定的生产观点、经济观点和全局观点。要求学生在设计过程中,坚持勤俭节约的原则,从现有条件出发,力争少损坏元件。 2.7在综合实验过程中,要做到爱护公物、遵守纪律、团结协作、注意安全。 二、主要内容 数字电子钟 设计一台能显示时﹑分、秒的数字电子钟,要求如下: 1)秒﹑分为00—59六十进制计数器,时为00—23二十四进制计数器; 2)可手动校正:可分别对秒﹑分﹑时进行手动脉冲输入调整或连续脉冲输入校正,(校正时不能输出进位)。 元器件选择 74LS162:4块与非门74LS00:2块共阳数码管LED 74LS161:2块GAL16V8:2块晶体振荡器:1MHZ GAL20V8:1块TDS-4实验箱 导线若干 所需要器件的图片如下

STC89C52单片机用户手册

STC89C52RC单片机介绍 STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。 主要特性如下: 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051. 工作电压:~(5V单片机)/~(3V单片机) 工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz 用户应用程序空间为8K字节 片上集成512字节RAM 通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O口用时,需加上拉电阻。 ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/,TxD/)直接下载用户程序,数秒 即可完成一片 具有EEPROM功能 具有看门狗功能 共3个16位定时器/计数器。即定时器T0、T1、T2 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒 通用异步串行口(UART),还可用定时器软件实现多个UART 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) PDIP封装 STC89C52RC单片机的工作模式 掉电模式:典型功耗<μA,可由外部中断唤醒,中断返回后,继续执行

原程序 空闲模式:典型功耗2mA 正常工作模式:典型功耗4Ma~7mA 掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备 STC89C52RC引脚图 STC89C52RC引脚功能说明 VCC(40引脚):电源电压 VSS(20引脚):接地 P0端口(~,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。

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

课题:基于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输入。

数字电子时钟逻辑电路设计

《数字逻辑》 课程设计报告 设计题目:数字电子钟 组员:黄土标黄维超蔡荣达孙清玉 指导老师:麦山 日期:2013/12/27 摘要数字电子钟是一种用数字显示秒、分、时的计时装置,本次数字时钟电路设计采用GAL系列芯片来分别实现时、分、秒的24进制和60进制的循环电路,并支 持手动清零和校正的功能。 关键词数字电子钟;计数器;GAL 4040芯片;M74LS125AF三态门 1设计任务及其工作原理 1.1设计任务 设计一台能显示时,分,秒的数字电子钟。 技术要求: (1)秒、分为00?59六十进制计数器

⑵时为00?23二十四进制计数器 (3)可手动校正:能分别进行秒、分、时的校正。只要将开关置于手动位置,可分别对秒、分、时进行手动脉冲输入调整或连续脉冲输入校正。并且可以手动按下脉冲进行清零。 1.2 工作原理 本数字电子钟的设计是根据时、分、秒各个部分的的功能的不同,分别用 GAL16V8D设计成六十进制计数器和用GAL22V10秒的个位,设计成十进制计数器,十位设计成六进制进制计数器(计数从00到59时清零并向前进位)。分部分的设计与秒部分的设计完全相同;时的个位,设计成二进制计数器,十位设计为四进制计数器,当时钟计数到23时59分59秒时,使计数器的小时部分清零,进而实现整体循环计时的功能。 2 电路的组成 2.1计数器部分:利用GAL16V8[和GAL22V1(芯片分别组成二十四进制计数器和六 十进制计数器,它们采用同步连接,利用外接标准脉冲信号进行计数。 2.2显示部分:将三片GAL芯片对应的引脚分别接到实验箱上的七段共阴数码显示管上,根据脉冲的个数显示时间。 3.3 分频器:由于实验箱上提供的时钟脉冲的时间间隔太小,所以使用GAL16V8D 和GAL16V8D 4040芯片和M74LS125AF三态门芯片设计一个分频器,使连续输出脉 冲信号时间间隔为0.5s

STC89C52单片机用户手册

STC89C52F单片机介绍 STC89C52F单片机是宏晶科技推出的新一代高速 /低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。 主要特性如下: * 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051. * 工作电压:5.5V?3.3V (5V单片机)/3.8V?2.0V (3V单片机) * 工作频率范围:0?40MHz相当于普通8051的0?80MHz实际工作频率可达48MHz *用户应用程序空间为8K字节 * 片上集成512字节RAM * 通用I/O 口(32个),复位后为:P1/P2/P3/P4是准双向口 /弱上拉,P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O 口 用时,需加上拉电阻。 * ISP (在系统可编程)/IAP (在应用可编程),无需专用编程器,无需专用仿真器,可通过串口( RxD/P3.0,TxD/P3.1 )直接下载用户程序,数秒 即可完成一片 * 具有 EEPROM能 *具有看门狗功能 * 共3个16位定时器/计数器。即定时器T0、T1、T2 * 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒 * 通用异步串行口( UART,还可用定时器软件实现多个 UART * 工作温度范围:-40?+85C(工业级)/0?75C(商业级) * PDIP封装 STC89C52F单片机的工作模式 *掉电模式:典型功耗<0.1吩,可由外部中断唤醒,中断返回后,继续执行原程序

数字电子时钟源程序

#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

单片机的电路原理

单片机的电路原理 单片机技术自发展以来已走过了近20年的发展路程。单片机技术的发展以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表现出较微处理器更具个性的发展趋势。小到遥控电子玩具,大到航空航天技术等电子行业都有单片机应用的影子。针对单片机技术在电子行业自动化方面的重要应用,为满足广大学生、爱好者、产品开发者迅速学会掌握单片机这门技术,于是产生单片机实验板普遍称为单片机开发板、也有单片机学习板的称呼。比较有名的例如电子人DZR-01A单片机开发板。 单片机开发板是用于学习51、STC、AVR型号的单片机实验设备。根据单片机使用的型号又有51单片机开发板、STC单片机开发板、AVR单片机开发板。常见配套有硬件、实验程序源码、电路原理图、电路PCB图等学习资料。例如电子人单片机开发板,针对部分学者需要特别配套有VB上位机软件开发,游戏开发等教程学习资料。开发此类单片机开发板的公司一般提供完善的售后服务与技术支持。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。 单片机(Microcontrollers)诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8051,此后在8051上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。 而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。高端的32位Soc单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。 常见配套资源如下: 1、硬件实验板及其配件如:连接线、CPU芯片、流水灯、点阵显示、ds18b20温度检测、彩色TFT液晶屏,SD卡,游戏开发(推箱子游戏)、收音机、mp3解码等。 2、实验程序源码,包含汇编源程序、C语言源程序。 3、电路原理图、PCB电路图。 4、实验手册、使用手册。 5、针对单片机开发板的详细讲解视频。 6、附加PCB设计制作、VB软件开发等计算机学习资料 1、8个LED灯,可以练习基本单片机IO操作,在其他程序中可以做指示灯使用。

数电课程设计数字电子钟说明书

数字电子技术电路课程设计题目:数字钟课程设计 学院:XXXXX 专业:XXXXX 班级:XXXX 姓名:XXXX 学号:XXXXX 指导老师:XXXXX

一、设计目的 数字钟是一种用数字电子技术实现时,分,秒计时的装置,具有较高的准确性和直观性等各方面的优势,而得到广泛的应用。此次设计数字电子钟是为了了解数字钟的原理,在设计数字电子钟的过程中,用数字电子技术的理论和制作实践相结合,进一步加深数字电子技术课程知识的理解和应用,同时学会使用Multisim电子设计软件。 二、设计要求 1.显示时,分,秒,用24小时制 2.能够进行校时,可以对数字钟进行调时间 3.能够正点报时(用555产生断续音频信号); 三、设计方案比较 方案一、采用中小规模集成电路实现 采用集成逻辑电路设计具有能实现,时、分、秒计时功能和定点报时功能,计时模块采用时钟信号触发,不需要程序控制。 方案二:EDA技术实现 采用EDA作为主控制器外围电路进行电压,时钟控制、键盘和LED控制。但此方案逻辑电路复杂,外围设备多,灵活性较低,不利于扩展 方案三、单片机编程实现 此方案采用单片机编程来设计和控制。 综上,根据自身的知识和方案比较,采用方案一,因为方案一简便灵活,扩展性好,同时符合此次数子电子知识设计的要求。 四、设计过程和说明 1.数字电子钟计时和显示功能的实现 (1)采用两片十进制计数器74LS160N扩展连接,设计60进制的计数器,显示0到59,在59时采用置数的方法,将两片74LS160N同时置数至0,以循环显示0到59。(图)

(2)24进制亦采用两片十进制计数器74LS160N扩展连接,设计24进制的计数器,显示0到23,在23时采用置数的方法,将两片74LS160N同时置数至0,以循环显示0到23(图)

电子时钟课程设计_数电课程设计数字电子时钟的实现

电子时钟课程设计_数电课程设计数字电子 时钟的实现 课程设计报告设计题目:数字电子时钟的设计与实现班级: 学号: 姓名: 指导教师: 设计时间: 摘要钟表的数字化给人们生产生活带来了极大的方便,大大的扩展了原先钟表的报时。诸如,定时报警、按时自动打铃、时间程序自动控制等,这些,都是以钟表数字化为基础的。功能数字钟是一种用数字电路实现时、分、秒、计时的装置,与机械时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。从原理上讲,数字钟是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。 因此,此次设计与制作数字钟就是为了了解数字钟的原理,从而学会制作数字钟,而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及使用方法。通过此次课程设计可以进一步学习与各种组合逻辑电路与时序电路的原理与使用方法。通过仿真过程也进一步学会了Multisim 7的使用方法与注意事项。

本次所要设计的数字电子表可以满足使用者的一些特殊要求,输 出方式灵活,如可以随意设置时、分、秒的输出,定点报时。由于集 成电路技术的发展,,使数字电子钟具有体积小、耗电省、计时准确、 性能稳定、维护方便等优点。 关键词:数字钟,组合逻辑电路,时序电路,集成电路目 录摘要 (1) 第1章概述 (3) 第2章课程设计任务及要求 (4) 2.1设计任务 (4) 2.2设计要求 (4) 第3章系统设计 (6) 3.1方案论证 (6) 3.2系统设计 (6) 3.2.1 结构框图及说明 (6) 3.2.2 系统原理图及工作原理 (7) 3.3单元电路设计 (8) 3.3.1 单元电路工作原理 (8) 3.3.2 元件参数选择···································14 第 4章软件仿真 (15) 4.1仿真电路图 (15) 4.2仿真过程 (16)

数字电子时钟课程设计

数字电子技术基础课程设计报告 班级:姓名: 学号: 一、设计目的 1掌握专业基础知识的综合能力。 2完成设计电路的原理设计、故障排除。 3逐步建立电子系统的研发、设计能力,为毕业设计打好基础。 4让学生掌握组合逻辑电路、时序逻辑电路及数字逻辑电路系统的设计、安装、测试方法。 5进一步巩固所学的理论知识,提高运用所学知识分析和解决实际问题的能力。 6培养书写综合实验报告的能力。 二、设计仪器 1 LM555CH 2 74LS161N 74LS160N 74LS290 3 74LS00 74LS08 4 电源电阻电容二极管接地等 三数字电子钟的基本功能及用途 现在数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性

能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点,,因此在许多电子设备中被广泛使用。 电子钟是人们日常生活中常用的计时工具,而数字式电子钟又有其体积小、重量轻、走时准确、结构简单、耗电量少等优点而在生活中被广泛应用,因此本次设计就用数字集成电路和一些简单的逻辑门电路来设计一个数字式电子钟,使其完成时间及星期的显示功能。 多功能数字钟采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。具有时间显示、走时准确、显示直观、精度、稳定等优点。电路装置十分小巧,安装使用也方便。同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱。 四设计原理及方框图 数字钟实际上是一个对标准频率进行计数的计数电路,标准的1HZ时间信号必须做到准确稳定。由图可见:本数字钟电路主要由震荡器、、时分秒计数器、译码显示器构成。它们的工作原理是:由震荡器产生的高频脉冲信号作为数字钟的时间基准,送入秒计数

数电数字时钟课程设计-- 数字电子钟逻辑电路设计

数电数字时钟课程设计-- 数字电子钟逻辑电路设计

数字电子技术 课程设计报告 姓名: 张保军 班级:电科102 学号:1005B223

数字电子钟逻辑电路设计 一、简述 数字电子钟是一种用数字显示秒、分、时、日的计时装置,与传统的机械钟相比,它具有走时准确,显示直观、无机械传动装置等优点,因而得到了广泛的应用。小到人们日常生活中的电子手表,大到车站、码头、机场等公共场所的大型数显电子钟。 数字电子钟的电路组成方框图如图1.1所示。 显示器译码器7进制周计数器 显示器 译码器 24进制时 计数器 显示器 译码器 60进制分 计数器 显示器 译码器 60进制秒 计数器 日校分校 时校秒校 单次或连续脉冲晶体振荡器分频器1Hz 图1.1 数字电子钟框图 由图1.1可见,数字电子钟由以下几部分组成:石英晶体振荡器和分频器组成的秒脉冲发生器;校时电路;六十进制秒、分计数器,二十四进制(或十二进制)计时计数器;秒、分、时的译码显示部分等。 二、设计任务和要求

用中、小规模集成电路设计一台能显示日、时、分、秒的数字电子钟,要求如下: 1.由晶振电路产生1Hz标准秒信号。 2.秒、分为00~59六十进制计数器。 3. 时为00~23二十四进制计数器。 4. 周显示从1~日为七进制计数器。 5. 可手动校时:能分别进行秒、分、时、日的校时。只要将开关置 于手动位置,可分别对秒、分、时、日进行手动脉冲输入调整或连续脉冲输入的校正。 6. 整点报时。整点报时电路要求在每个整点前呜叫五次低音 (500Hz),整点时再呜叫一次高音(1000Hz)。 三、可选用器材 1. 通用实验底板 2. 直流稳压电源 3. 集成电路:CD4060、74LS74、74LS161、74LS248及门电路 4. 晶振:32768 Hz 5. 电容:100μF/16V、22pF、3~22pF之间 6. 电阻:200Ω、10KΩ、22MΩ 7. 电位器:2.2KΩ或4.7KΩ 8. 数显:共阴显示器LC5011-11 9. 开关:单次按键

(完整版)STC89C52RC单片机手册

STC89C52单片机用户手册 [键入作者姓名] [选取日期]

STC89C52RC单片机介绍 STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。 主要特性如下: 1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意 选择,指令代码完全兼容传统8051. 2.工作电压:5.5V~ 3.3V(5V单片机)/3.8V~2.0V(3V单片机) 3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作 频率可达48MHz 4.用户应用程序空间为8K字节 5.片上集成512字节RAM 6.通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉, P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O口用时,需加上拉电阻。 7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无 需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片 8.具有EEPROM功能 9.具有看门狗功能 10.共3个16位定时器/计数器。即定时器T0、T1、T2 11.外部中断4路,下降沿中断或低电平触发电路,Power Down模式可 由外部中断低电平触发中断方式唤醒 12.通用异步串行口(UART),还可用定时器软件实现多个UART 13.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) 14.PDIP封装 STC89C52RC单片机的工作模式 掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序

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

钟〔★〕这里用了两种编写方法(即汇编语言与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

相关文档