文档库 最新最全的文档下载
当前位置:文档库 › DIY高精度时钟、温度显示器Ds3231+12864+ds18b20+89c51

DIY高精度时钟、温度显示器Ds3231+12864+ds18b20+89c51

DIY高精度时钟、温度显示器Ds3231+12864+ds18b20+89c51
DIY高精度时钟、温度显示器Ds3231+12864+ds18b20+89c51

DIY高精度时钟、温度显示器Ds3231+12864+ds18b20+89c51 硬件:

程序:

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

/*端口定义*/

sbit LCD_RS=P2^6;

sbit LCD_RW=P2^5;

sbit LCD_EN=P2^4;

sbit LCD_PSB=P2^3;

sbit DQ=P3^7; //18b20

sbit SDA=P1^4; //ds32321 //模拟I2C数据传送位SDA sbit SCL=P1^3; //模拟I2C时钟控制位SCL //***按键功能****//

////***K1停止时间显示****//

////***K2选择修改位置****//

////***K3进行加1的修改****//

////***K4将修改写入ds3231,同时启动时间显示****//

sbit K1=P3^2;

sbit K2=P3^3;

sbit K3=P3^4;

sbit K4=P3^5;

//定义变量

uchar numbr[10]="0123456789"; //字模

uchar dis4[]=" "; // 第四行显示自己添加

uchar t[]=" . ℃" ; //18b20

uint sdata,xiaoshu1,xiaoshu2; //整数、小数1位、小数2位

bit fg=1; //温度正负标志

uchar tempL=0,tempH=0; // 变量

uchar year,month,date,hour,min,sec; // ds3231

uchar a[]="2011年22月33日";

uchar b[]="11时22分33秒";

///函数

//******************延时子程序*******************************

//这个延时程序的具体延时时间是time=i*8+10,适用于小于2ms的延时

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

void delay(unsigned char i)

{

for(i;i>0;i--);

}

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

// 延时子程序

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

void delay1ms(uchar j)

{

while(j!=0)

{uchar i;

for(i=124;i>0;i--); //延时124*8+10=1002us

j--;

}

}

/**************************12864部分*************************************/

/**************************12864部分*************************************/

/*写指令数据到LCD

RS=L——表示DB0-DB7为显示指令数据

RW=L——表示DB0-DB7数据被write(当E=“H-L”,指令数据被写到IR或DR)

E=高脉冲

此时DB0-DB7=指令码*/

void write_cmd(uchar cmd)

{

LCD_RS=0;

LCD_EN=0;

P0=cmd;

delay1ms(5);

LCD_EN=1;

delay1ms(5);

LCD_EN=0;

}

/*设定显示位置*/

void lcd_pos(uchar X, uchar Y)

{

uchar pos;

if(X == 0)

{

X = 0x80;

}

else if(X == 1)

{

X = 0x90;

}

else if(X == 2)

{

X = 0x88;

}

else if(X == 3)

{

X = 0x98;

}

pos = X + Y;

write_cmd(pos); //显示地址

}

/*写显示数据到LCD*/

/*

RS=H ——表示DB0-DB7为显示数据

RW=L ——RW=L,E='H-L',DB0-DB7数据被写到IR或DR

E=高脉冲

DB0-DB7=显示数据*/

void write_dat(uchar dat)

{

LCD_RS=1;

LCD_EN=0;

P0=dat;

delay1ms(5);

LCD_EN=1;

delay1ms(5);

LCD_EN=0;

}

/*LCD初始化*/

void lcd_init()

{ uint i;

LCD_PSB=1; //并口方式

write_cmd(0x30); //基本操作指令

delay1ms(5);

write_cmd(0x0c); //打开显示,光标关闭

delay1ms(5);

write_cmd(0x01); //清除LCD显示类容

delay1ms(5);

lcd_pos(3,0);

i=0;

while(dis4[i]!='\0')

{

delay1ms(1);

write_dat(dis4[i]);

delay1ms(1);

i++;

}

}

/**********************************18b20*************************************** *********/

/**********************************18b20*************************************** *********/

void Init_DS18B20(void) //初始化

{

uchar x=0;

DQ=1; //DQ先置高

delay(8); //稍延时

DQ=0; //发送复位脉冲

delay(80); //延时(>480us)

DQ=1; //拉高数据线

delay(5); //等待(15~60us)

x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1

delay(20);

}

//**********读一个字节************//

ReadOneChar(void) //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号

{

unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期

unsigned char dat=0;

for (i=8;i>0;i--) //一个字节有8位

{

DQ=1;

delay(1);

DQ=0;

dat>>=1;

DQ=1;

if(DQ)

dat|=0x80;

delay(4);

}

return(dat);

}

//*********************** **写一个字节**************************//

void WriteOneChar(unsigned char dat)

{

unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,

for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。{

DQ=0; //在开始另一个写周期前必须有1us以上的高电平恢复期。

DQ=dat&0x01;

delay(5);

DQ=1;

dat>>=1;

}

delay(4);

}

void ReadTemperature(void) //读温度值(低位放tempL;高位放tempH;)//

{

Init_DS18B20(); //初始化

WriteOneChar(0xcc); //跳过读序列号的操作

WriteOneChar(0x44); //启动温度转换

delay(125); //转换需要一点时间,延时

Init_DS18B20(); //初始化

WriteOneChar(0xcc); //跳过读序列号的操作

WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)

tempL=ReadOneChar(); //读出温度的低位LSB

tempH=ReadOneChar(); //读出温度的高位MSB

if(tempH>0x7f) //最高位为1时温度是负

{

tempL=~tempL; //补码转换,取反加一

tempH=~tempH+1;

fg=0; //读取温度为负时fg=0

}

sdata = tempL/16+tempH*16; //整数部分

xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位

xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位

t[0]=numbr[sdata/10];

t[1]=numbr[sdata%10];

t[3]=numbr[xiaoshu1];

t[4]=numbr[xiaoshu2];

}

/*****************************************ds3231******************************* *************/

#define ADDRTW 0xD0 //器件写地址

#define ADDRTD 0xD1 //器件读地址

#define DS3231_SEC 0x00 //秒

#define DS3231_MIN 0x01 //分

#define DS3231_HOUR 0x02 //时

#define DS3231_DAY 0x03 //星期

#define DS3231_DATE 0x04 //日

#define DS3231_MONTH 0x05 //月

#define DS3231_YEAR 0x06 //年

//闹铃1

#define DS3231_Al1SEC 0x07 //秒

#define DS3231_AL1MIN 0x08 //分

#define DS3231_AL1HOUR 0x09 //时

#define DS3231_AL1DAY 0x0A //星期/日

//闹铃2

#define DS3231_AL2MIN 0x0b //分

#define DS3231_AL2HOUR 0x0c //时

#define DS3231_AL2DAY 0x0d //星期/日

#define DS3231_CONTROL 0x0e //控制寄存器

#define DS3231_STATUS 0x0f //状态寄存器

bit ack;

uchar BCD2HEX(uchar val) //BCD转换为Byte

{ uchar i;

i= val&0x0f;

val >>= 4;

val &= 0x0f;

val *= 10;

i += val;

return i;

}

uchar HEX2BCD(uchar val)//B码转换为BCD码

{

uchar i,j,k;

i=val/10;

j=val%10;

k=j+(i<<4);

return k;

}

void Start()

{

SDA=1; //发送起始条件的数据信号

delay(1);

SCL=1;

delay(5); //起始条件建立时间大于4.7us,延时

SDA=0; //发送起始信号

delay(5); // 起始条件锁定时间大于4μs

SCL=0; //钳住I2C总线,准备发送或接收数据delay(2);

}

{

SDA=0; //发送结束条件的数据信号

delay(1); //发送结束条件的时钟信号

SCL=1; //结束条件建立时间大于4us

delay(5);

SDA=1; //发送I2C总线结束信号

delay(4);

}

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

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

字节数据发送函数

函数原型: void SendByte(uchar Dat);

功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对

此状态位进行操作.(不应答或非应答都使ack=0)

ack=1 发送数据正常,

ack=0 被控器无应答或损坏。

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

void SendByte(uchar Dat)

{

uchar BitCnt;

for(BitCnt=0;BitCnt<8;BitCnt++) //要传送的数据长度为8位

{

if((Dat<

SDA=1; //判断发送位

else

SDA=0;

delay(1);

SCL=1; //置时钟线为高,通知被控器开始接收数据位

delay(5); //保证时钟高电平周期大于4μs

SCL=0;

}

delay(2);

SDA=1; //8位发送完后释放数据线,准备接收应答位

delay(2);

SCL=1;

delay(3);

if(SDA==1)

ack=0;

ack=1; //判断是否接收到应答信号SCL=0;

delay(2);

}

uchar RcvByte() // 功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。

{

uchar retc;

uchar BitCnt;

retc=0;

SDA=1; //置数据线为输入方式

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

{

delay(1);

SCL=0; //置时钟线为低,准备接收数据位

delay(5); //时钟低电平周期大于4.7μs

SCL=1; //置时钟线为高使数据线上数据有效

delay(3);

retc=retc<<1;

if(SDA==1)

retc=retc+1; //读数据位,接收的数据位放入retc中

delay(2);

}

SCL=0;

delay(2);

return(retc);

}

void I2CACK(bit a) // 功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)

{

if(a==0)

SDA=0; //在此发出应答或非应答信号

else

SDA=1;

delay(3);

SCL=1;

delay(5); //时钟低电平周期大于4μs

SCL=0; //清时钟线,钳住I2C总线以便继续接收

delay(2);

}

uchar I2CRead() /************从DS3231当前地址读一个字节************/

{

uchar read_data;

Start();

SendByte(ADDRTD);

if(ack==0)

{

return(0);

}

read_data = RcvByte();

I2CACK(1);

Stop();

return read_data;

}

uchar I2CReadAdd(uchar addr) /************从DS3231指定地址读一个字节************/

{

Start();

SendByte(ADDRTW);

if(ack==0)

{

return(0);

}

SendByte(addr);

if(ack==0)

{

return(0);

}

return(I2CRead());

}

void Readtime() /*********************读取时间**********************/

{

uchar temp;

temp=I2CReadAdd(DS3231_SEC);//秒

sec=BCD2HEX(temp);

temp=I2CReadAdd(DS3231_MIN);//分

min=BCD2HEX(temp);

temp=I2CReadAdd(DS3231_HOUR); //时

hour=BCD2HEX(temp);

temp=I2CReadAdd(DS3231_DATE); //日

date=BCD2HEX(temp);

temp=I2CReadAdd(DS3231_MONTH); //月

month=BCD2HEX(temp);

temp=I2CReadAdd(DS3231_YEAR); //年

year=BCD2HEX(temp);

}

void InitDS3231() //ds3231初始化{SCL=1;

delay(5);

SDA=1;

delay(5);

}

void TimeDisplay(uchar Dhour,uchar Dmin,uchar Dsec) //时分秒数组赋值{ b[0]=numbr[Dhour / 10]; // 时十位

b[1]=numbr[Dhour % 10]; // 时个位

b[4]=numbr[Dmin / 10]; // 分十位

b[5]=numbr[Dmin % 10]; // 分个位

b[8]=numbr[Dsec / 10]; // 秒十位

b[9]=numbr[Dsec % 10]; // 秒个位

}

void DateDisplay(uchar Dyear,uchar Dmonth,uchar Dday) //年月天数组赋值{ a[2]=numbr[Dyear / 10]; // 年十位

a[3]=numbr[Dyear % 10]; // 年个位

a[6]=numbr[Dmonth / 10]; // 月十位

a[7]=numbr[Dmonth % 10]; // 月个位

a[10]=numbr[Dday / 10]; // 天十位

a[11]=numbr[Dday % 10]; // 天个位

}

void Start_I2C()

{

SDA=1; //发送起始条件的数据信号

delay(1);

SCL=1;

delay(5); //起始条件建立时间大于4.7us,延时

SDA=0; //发送起始信号

delay(5); // 起始条件锁定时间大于4μs

SCL=0; //钳住I2C总线,准备发送或接收数据

delay(2);

}

void Stop_I2C()

{

SDA=0; //发送结束条件的数据信号

delay(1); //发送结束条件的时钟信号

SCL=1; //结束条件建立时间大于4us

delay(5);

SDA=1; //发送I2C总线结束信号

delay(4);

}

uchar write_byte(uchar addr, uchar write_data)

{

Start_I2C();

SendByte(ADDRTW);

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

if (ack == 0)

return 0;

SendByte(addr);

if (ack == 0)

return 0;

SendByte(write_data);

if (ack == 0)

return 0;

Stop_I2C();

delay1ms(10);

return 1;

}

void ModifyTime(uchar yea,uchar mon,uchar da,uchar hou,uchar min,uchar sec)

{ uchar temp=0;

temp=HEX2BCD(yea);

write_byte(DS3231_YEAR,temp); //修改年

temp=HEX2BCD(mon);

write_byte(DS3231_MONTH,temp); //修改月

temp=HEX2BCD(da); ///////////////////// write_byte(DS3231_DATE,temp); //修改日

temp=HEX2BCD(hou);

write_byte(DS3231_HOUR,temp); //修改时

temp=HEX2BCD(min);

write_byte(DS3231_MIN,temp); //修改分

temp=HEX2BCD(sec);

write_byte(DS3231_SEC,temp); //修改秒

}

void xianshi(void)

{

{ uint i;

TimeDisplay(hour,min,sec);

lcd_pos(1,1); //时间

i=0;

while(b[i]!='\0')

{

delay1ms(1);

write_dat(b[i]);

delay1ms(1);

i++;

}

DateDisplay(year,month,date); //显示日期

delay1ms(1);

lcd_pos(0,0);

i=0;

while(a[i]!='\0')

{

delay1ms(1);

write_dat(a[i]);

delay1ms(1);

i++;

}

ReadTemperature(); //显示温度

delay1ms(1);

lcd_pos(2,1);

delay1ms(1);

i=0;

while(t[i]!='\0')

{

delay1ms(1);

write_dat(t[i]);

delay1ms(2);

i++;

}

}

}

void shuaxin(void)

{ uint i;

TimeDisplay(hour,min,sec);

lcd_pos(1,1); //时间

i=0;

while(b[i]!='\0')

{

delay1ms(1);

write_dat(b[i]);

delay1ms(1);

i++;

}

DateDisplay(year,month,date); //显示日期

delay1ms(1);

lcd_pos(0,0);

i=0;

while(a[i]!='\0')

{

delay1ms(1);

write_dat(a[i]);

delay1ms(1);

i++;

}

}

void sotp(void)

{

uint i;

while(1)

{

duan1: if(K1==0)

{

delay1ms(100);

if(K1==0)

{

Readtime();

shuaxin();

i=0;

goto duan2;

}

}

else

{goto duan5;}

duan2: if(K2==0)

{

delay1ms(100);

if(K2==0)

{

i++;

if(i>6){i=0;}

shuaxin();

}

}

switch(i)

{

case 0: if(K3==0){delay1ms(100);if(K3==0){year=year+1;} if(year>=100){year=0;} shuaxin();} break;

case 1: if(K3==0){delay1ms(100);if(K3==0){month=month+1;} if(month>=13){month=0;} shuaxin();} break;

case 2: if(K3==0){delay1ms(100);if(K3==0){date=date+1;} if(date>=32){date=0;} shuaxin();} break;

case 3: if(K3==0){delay1ms(100);if(K3==0){hour=hour+1;} if(hour>=25){hour=0;} shuaxin();} break;

case 4: if(K3==0){delay1ms(100);if(K3==0){min=min+1;} if(min>=61){min=0;} shuaxin();} break;

case 5: if(K3==0){delay1ms(100);if(K3==0){sec=sec+1;} if(sec>=61){sec=0;} shuaxin();} break;

}

duan4: if(K4==0)

{

delay1ms(100);

if(K4==0)

{

ModifyTime(year,month,date,hour,min,sec);

goto duan5;

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

}

}

else

{goto duan2;}

duan5: Readtime();

xianshi();

}

}

main() /*主程序*/ {

lcd_init();

delay1ms(5);

InitDS3231();

delay1ms(5);

delay1ms(5);

sotp();

}

12864液晶电子时钟+温度显示

12864液晶电子时钟+温度显示 上午花了一上午时间,用12864 液晶写了一个电子时钟加温度传感器程序, 先说一下程序的功能,可以实现显示年月日时间和温度, 年月日和时间是可通过按键调节的,调节相应的选项时,该选项会闪烁,并 停止走时,当调节完毕后时钟恢复走时。现在将程序和思路写下来,以便日后 查看和与大家探讨改进,欢迎高手提出宝贵意见。 我使用的是HJ12864M-1 带字库液晶,所以在显示上稍微方便一点。下面先 来说一下我的编程思路。时间更新用的是单片机自带的定时器,液晶要显示数 字必需将它转换成ASCii 码的形式,数字0-9 的ASCii 码与数字之间有一个定 量的关系,当数字加上0x30 之后便得到该数字的ASCii 码,这样以来液晶更 新数据就变得简单了。调节时间时对应选项闪烁,是通过不断的交替写入数据 和空格实现的。温度显示用的是DS18B20,,将测得的当前温度不断更新显示在 液晶上。调节时间用的是三个独立按键。由于这个程序我使用模块化来写的, 就只能将每个模块分别给出来,大家只要组装一下便可以使用。如果需要完整 程序的可以给我留言我发给你们。 下面是12864 液晶的初始化,读写命令,及读忙操作 #include “lcd12864.h”#include reg52.hsbit RS=P2 ; //控制端口位定义sbit RW=P2;sb it EN=P2;vo id init_12864(){delay(40);write_com(0x30);//8 位数据格式,基本指令显示delay(10); //延时时间write_com(0x30);//8 位数据格式,基本 指令显示delay(37);write_com(0x0C);//开显示、关闭光标delay(10); write_com(0x01);//清屏指令delay(10); //延时write_com(0x06);//设置显示点:指针自加1}tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

简单51单片机数字时钟设计

题目:简单51单片机数字时钟设计 院系: 物理与电气工程学院 专业:自动化专业 班级:10级自动化 姓名:苏吉振 学号:2 老师:李艾华

引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS 化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。 单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。 单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 数字钟是采用数字电路实现对时,分,秒数字显示的计时装置,广泛用于个 人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。

基于51单片机设计的带有测温功能的电子时钟汇总

、 职业技能训练之 电子技术课程设计报告 学院电子与信息学院 设计题目基于51单片机设计的带有测温功能的电子时钟班级XXX 姓名XXX 学号XXX 指导教师XXX 时间2012年06月25日

目录 一、设计要求 二、课程设计的方案、目的及意义 三、硬件设计方案 四、软件设计方案 五、总结 六、参考资料

一、设计要求 用51单片机设计带温度显示的电子时钟,具体要求如下: 1、利用DS1302时钟芯片实现时钟功能模块。 2、时钟要求可以调节时间:年、月、日、时、分、秒。 3、利用LCD1602显示。 4、利用DS18B20芯片实现温度功能模块。 5、利用按键完成各项功能。 二、课程设计方案、目的及意义 1、总体方案: 用STC89C51单片机作为CPU主控制器,DS1302时钟芯片提供准确时钟信号,DS18B20温度传感器采集温度信息,三个按键进行加减调整、功能切换作用,通过LCD1602对外多功能显示。 2、具体方案: CPU控制所有模块,通过循环反复从DS1302中读取时钟信息,传送至LCD1602显示,得到基本时钟功能。当分为59,秒为56时开始,每隔一秒LED 灯点亮240毫秒,0分0秒时LED灯点亮700毫秒。从而实现整点光报时。 定时循环从DS18B20中读取温度信息,传送至LCD1602显示,得到基本温度计功能。当温度高于30度(包括30度)时,点亮红色LED灯,提醒当天为高温天气。低于0度时,点亮蓝色LED灯,提醒当天为冰冻天气。 键盘使用扫面方式,MENU键控制功能切换,完成时钟和温度间的转换。OK键控制时间调整与确定,UP、DOWN键调节时间,R、L 键选择调整对象。进入调整时,暂停DS1302数据读取,并将改变的时间数据写入DS1302,并送LCD1602显示,同时,启动LCD1602光标闪烁,确定调整对象,完成人机对话。退出调整时,停止写入数据,重新读取DS1302时钟信息。从而完善时钟功能。 3、目的及意义 可作为产品生产,作为居家的时钟显示与温度计。

数字电子时钟设计

电子技术课程设计 数字电子时钟的设计 摘要: 设计一个周期为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

数字万用表使用方法

数字万用表使用方法 2010-01-27 10:15 简介:数字万用表相对来说,属于比较简单的测量仪器。本篇,作者就教大家数字万用表的正确使用方法。从数字万用表的电压、电阻、电流、二极管、三极管、MOS场效应管的测量等测量方法开始,让你更好的掌握万用表测量方法。 一、电压的测量 1、直流电压的测量,如电池、随身听电源等。首先将黑表笔插进“com”孔,红表笔插进“V Ω ”。把旋钮选到比估计值大的量程(注意:表盘上的数值均为最大量程,“V-”表示直流电压档,“V~”表示交流电压档,“A”是电流档),接着把表笔接电源或电池两端;保持接触稳定。数值可以直接从显示屏上读取,若显示为“1.”,则表明量程太小,那么就要加大量程后再测量工业电器。如果在数值左边出现“-”,则表明表笔极性与实际电源极性相反,此时红表笔接的是负极。 2、交流电压的测量。表笔插孔与直流电压的测量一样,不过应该将旋钮打到交流档“V~”处所需的量程即可。交流电压无正负之分,测量方法跟前面相同。无论测交流还是直流电压,都要注意人身安全,不要随便用手触摸表笔的金属部分。 二、电流的测量 1、直流电流的测量。先将黑表笔插入“COM”孔。若测量大于200mA的电流,则要将红表笔插入“10A”插孔并将旋钮打到直流“10A”档;若测量小于200mA的电流,则将红表笔插入“200mA”插孔,将旋钮打到直流200mA以内的合适量程。调整好后,就可以测量了。将万用表串进电路中,保持稳定,即可读数。若显示为“1.”,那么就要加大量程;如果在数值左边出现“-”,则表明电流从黑表笔流进万用表。 交流电流的测量。测量方法与1相同,不过档位应该打到交流档位,电流测量完毕后应将红笔插回“VΩ”孔,若忘记这一步而直接测电压,哈哈!你的表或电源会在“一缕青烟中上云霄”--报废! 三、电阻的测量

一种用于高速高精度ADC的电压基准源设计

0引言 随着集成电路规模不断扩大,尤其是芯片系统集成技术的提出,对模拟集成电路基本模块(如A/D、D/A转换器、滤波器以及锁相环等电路)提出了更高的精度和速度要求,这也就意味着系统对其中的基准源模块提出了更高的要求。 用于高速高精度A DC的片内电压基准源不仅要满足A DC精度和采样速率的要求,并应具有较低的温度系数和较高的电源抑制比,此外,随着低功耗和便携的要求,A DC也在朝着低压方向发展,相应的基准源也要满足低电源电压的要求。 本文分析了基准源对流水线A DC精度的影响,并建立了相应的模型,确定了高速高精度A DC对电压基准源的性能要求。 给出了基于1.8 V的低电源电压,并采用结构简单的VBE非线性二阶补偿带隙基准源的核心电路,该补偿方式可以实现较低的温度系数,能满足高速高精度A DC的要求。箝位运放采用一种低噪声两级运算放大器,该运放可提供小于0.02 mV 的失调电压,因而保证了基准源的补偿精度。为了提高基准源的电源抑制比,本文除采用常用的共源共栅电流镜技术以外,还设计了一种简单有效的电源抑制比提高电路,从而使得基准源的电源抑制比有了较大提高。 1 电压基准源影响的建模分析 在Pipelined A DC系统中,基准源的主要作用是为子A DC提供比较电平,同时为MD A C提供残差电压。差分基准电压源发生偏移会导致子A DC比较电平和MDA C残差电压发生变化。而通过引入冗余位矫正技术可大大减小差分基准电压源所引起的比较电平变化对系统指标造成的影响,但是,MDA C残差电压变化的影响却无法消除,系统的转移特性曲线仍将会发生变化,从而造成系统指标下降。其中基准电压源的偏移主要来源于温度和电源电压的影响。 下面分析基准电压源温度漂移特性对DNL的影响。一般情况下,实际相邻输出与理想相邻输出之间的偏差可以表示为: 对于首级精度为3.5位的12位A DC,在-40℃~85℃的温度范围内,对温度要求最严格的比较器一般要求基准电压源的最大温漂不超过(7/8)V diff。 根据下列两式: 可以得到DNL对基准电压源温度系数的要求,即温度系数T C≤6.84 ppm/℃。式中,V T0为室温25℃时的基准电压值。

数字钟的设计与制作过程

数字钟的设计与制作 一、设计指标 1. 显示时、分、秒。 2. 可以24 小时制或12 小时制。 3. 具有校时功能,可以对小时和分单独校时,对分校时的时候,停止分向小时进位。校时时钟源可以手动输入或借 用电路中的时钟。 4. 具有正点报时功能,正点前10 秒开始,蜂鸣器 1 秒响 1 秒停地响 5 次。(选做) 5. 为了保证计时准确、稳定,由晶体振荡器提供标准时间的基准信号。 二、设计要求 1. 画出总体设计框图,以说明数字钟由哪些相对独立的功能模块组成,标出各个模块之间互相联系,时钟信号传输 路径、方向和频率变化,并以文字对原理作辅助说明。 2. 设计各个功能模块的电路图,加上原理说明。 3. 选择合适的元器件,并选择合适的输入信号和输出方式,在面包板上接线验证、调试各个功能模块的电路。在确 保电路正确性的同时,输入信号和输出方式要便于电路的测试和故障排除。(也可选用Mutisim 仿真) 4. 在验证各个功能模块基础上,对整个电路的元器件和布线,进行合理布局,进行整个数字钟电路的接线调试。 三、制作要求自行在面包板上装配和调试电路,能根据原理、现象和测量的数据检查和发现问题,并加以解决。 四、设计报告要求 1. 格式要求(见附录 1 ) 2. 内容要求 ①设计指标。 ②画出设计的原理框图,并要求说明该框图的工作过程及每个模块的功能。 ③列出元器件清单,并画出管脚分配图和芯片引脚图。 ④画出各功能模块的电路图,加上原理说明(如 2 、 5 进制到10 进制转换,10 进制到 6 进制转换的原理,个 位到十位的进位信号选择和变换等)。 ⑥画出总布局接线图(集成块按实际布局位置画,关键的连接应单独画出,计数器到译码器的数据线、译码器到数 码管的数据线可以简化画法,但集成块的引脚须按实际位置画,并注明名称)。 ⑦数字钟的运行结果和使用说明。 ⑧设计总结:设计过程中遇到的问题及解决办法;设计过程中的心得体会;对课程设计的内容、方式等提出建议。 五、仪器与工具 1. 直流电源 1 台。 2. 四连面包板 1 块。 3. 数字示波器(每两人 1 台) 4. 万用表(每班 2 只)。

基于单片机的时钟温度显示器制作报告1

基于单片机的时钟温度显示器制作报告班级:电子信息工程1003班姓名:刘洋 一:方案 1:采用STC89C52单片机便于硬件扩展。 2:采用LCD1602液晶显示。 3:采用DS12C887时钟芯片。 4:采用DS18B20温度传感器。 5:采用直流电源供电。因知识水平有限,所以直接采用5.5V直流电源供电。6:安装有电池仓,可用两节CR2302电池供电。 二:主要元件简介 1:1602LCD:标准字符型液晶显示模块(LCM),采用点阵型液晶显示器(LCD),可显示16个字符X2行西文字符,字符尺寸为,内置HD44780及兼容芯片接口型液晶显示控制器,可与单片机直接连接,广泛应用于各类仪器仪表及电子设备。 2:DS12C887实时时钟芯片功能丰富,可以用来直接代替IBM PC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内的时间记录,有12小时制和24小时制两种模式。在12小时制模式中,用AM和PM区分上午和下午;时间的表示方法也有两种,一种用二进制数表示,一种是用BCD码表示;DS12C887中带有128字节RAM,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,

称为控制寄存器,113字节通用RAM使用户使用;此外用户还可对DS12C887进行编程以实现多种方波输出,并对其内部的三路中断通过软件进行屏蔽。3:TS-18B20数字温度传感器,采用DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 3.1 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 3.2 测温范围-55℃~+125℃,固有测温分辨率0.5℃。 3.3 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温 3.4 工作电源: 3~5V/DC 3.5 在使用中不需要任何外围元件 3.6 测量结果以9~12位数字量方式串行传送 3.7 适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温 3.8 PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。三:设计 1:电子线路:用导线与锡条手工焊制,略显粗陋。 2:程序设计: #include #include #define uchar unsigned char #define uint unsigned int sbit lcdrs=P2^4;//液晶控制

数字显示电子钟的PLC控制

石家庄铁道大学四方学院 集中实践报告书 课题名称 数字显示电子钟的PLC 控制 姓 名 *** 学 号 2012**** 系、 部 电气工程系 专业班级 方12**-* 指导教师 李** 2014年 12月 31日 ※※※※※※※※ ※ ※※ ※ ※ ※ ※ ※ ※ ※ ※ ※※※※※ 2012级 PLC 课程设计

目录 第1章设计目的 (1) 第2章设计要求 (1) 第3章PLC选型、I/O分配表和接线图 (2) 3.1PLC选型 (2) 3.2I/O分配表 (2) 3.3I/O接线图 (3) 第4章PLC程序设计 (3) 4.1梯形图设计 (3) 4.2指令语句表 (21) 第5章设计总结 (34) 参考文献 (34)

第1章 设计目的 在可编程序控制器问世之前,继电器接触器控制在各个领域中占有主要地位。继电器接触器控制系统是采用固定接线的硬件实现控制逻辑。接线量大,容易出错不容易检查,为了解决这一问题,美国通用公司提出用一种新型的控制装置取代继电器接触器控制装置。随着微处理器技术的的发展,可编程控制器的处理速度大大提高,增加了许多特殊功能,使得可编程控制器不仅可以实现逻辑控制,而且可以实现对模拟量进行控制。PLC 的可靠性高,抗干扰能力强,通用性强,使用方便,编程语言简单易学,便于掌握。电子时钟的任务是计时间,要求左边两个数码管显示0~23小时,右边两个数码管显示00~60分,中间两个发光二极管显示秒(即每秒闪烁一次)。由于PLC 的可靠性高,抗干扰能力强,通用性强,使用方便,编程语言简单易学,便于掌握,在各个方面改变适用性强,使得电子时钟计时器工作时可靠灵敏。 第2章 设计要求 由PLC 控制的大型数字电子钟如图49所示。电子钟由4个7段LED 发光管组成。左边两个数码管显示0~23小时,右边两个数码管显示00~60分,中间两个发光二极管显示秒(即每秒闪烁一次)。 开始状态时,显示为00:00,启动以后开始计时。 输入输出信号见下表和图,根据控制要求进行设计。 b c d e f a g

数字万用表的使用..

数字万用表使用和常用电子元器件的识别与检测 一、交直流电流的测量 根据测量电流的大小选择适当的电流测量量程和红表笔的插入“A”电流插孔,测量直流时,红表笔(插入电流插孔中)接触电压高一端,黑表笔接触电压低的一端,正向电流从红表笔流入万用表,再从黑表笔流出,当要测量的电流大小不清楚的时候,先用最大的量程来测量,然后再逐渐减小量程来精确测量。

测量电流时的连接电路图(i为电流) 二、交直流电压的测量 红表笔插入“V/Ω”插孔中,根据电压的大小选择适当的电压测量量程,黑表笔接触电路“地”端,红表笔接触电路中待测点。特别要注意,数字万用表测量交流电压的频率很低(45~500Hz),中高频率信号的电压幅度应采用交流毫伏表来测量。 测量电压时的连接电路图(u为电压) 三、电阻的测量 电阻的测量比较简单红表笔插入“V/Ω”插孔中,黑表笔插入"com"插孔,根据电阻的大小选择适当的电阻档,红、黑两表笔分别接触电阻两端,观察读数即可。 特别是,测量在路电阻时(在电路板上的电阻),应先把电路的电源关断,以免引起读数抖动。禁止用电阻档测量电流或电压(特别是交流220V电压),否则容易损坏万用表。在路检测时注意电阻不能有并联支路。 电阻档选的比较大时(比如测量10M的电阻)应先将两支表笔短路,显示的值可能为1M。每次测量完毕需把测量结果减去此值,才是实际电阻值(电阻档高时,误差会比较大)。

四、短开路检测 将功能、量程开关转到蜂鸣档位置,两表笔分别测试点,若有短路,则蜂鸣器会响。 用此方法可以检测电路线路的通断情况。 注意:蜂鸣器响并不一定表示两点间线路短路,若两点间电阻比较小(20Ω)也会响。 五、数字万用表电容检测方法 检测电容有专用的电容表来测量电容容量,如下图所示 也可用万用表测量 固定小电容器的检测 1、检测10pF以下的小电容因10pF以下的固定电容器容量太小,用万用表进行测量,只能定性的检查其是否有漏电,内部短路或击穿现象。测量时,可选用万用表电阻档,用两表笔分别任意接电容的两个引脚,阻值应为无穷大。若测出阻值(指针向右摆动)为零,则说明电容漏电损坏或内部击穿。 2、检测10PF~0.01μF固定电容器是否有充电现象,进而判断其好坏。万用表选用电阻挡。两只三极管的β值均为100以上,且穿透电流要些可选用3DG6等型号硅三极管组成复合管。万用表的红和黑表笔分别与复合管的发射极e和集电极c相接。由于复合三极管的放大作用,把被测电容的充放电过程予以放大,使万用表指针摆幅度加大,从而便于观察。应注意的是:在测试操作时,特别是在测较小容量的电容时,要反复调换被测电容引脚接触A、B两点,才能明显地看到万用表指针的摆动。 3、对于0.01μF以上的固定电容,可用万用表的R×10k挡直接测试电容器有无充电过程以及有无内部短路或漏电,并可根据指针向右摆动的幅度大小估计出电容器的容量。 1.数字万用表检测电解电容: (1)用电容档直接检测 某些数字万用表具有测量电容的功用,UT51其量程分为200μ和20μ两档。

数字时钟设计与制作

数字时钟设计 学院:电气与电子工程学院 班级: 学号: 姓名:

数字时钟设计 一、设计目的 数字电子技术的迅速发展,使各种类型集成电路在数字系统、控制系统、信号处理等方面得到了广泛的应用。为了适应现代电子技术的迅速发展需要,能够较好的面向数字化和专用集成电路的新时代,数字电路综合设计与制作数字钟,可以让我们了解数字时钟的原理。在实验原理的指导下,培养了分析和设计电路的能力。并且学会检查和排除故障,提高分析处理实验结果的能力。 二、设计要求 1、掌握各芯片的逻辑功能及使用方法 2、数字时钟时的计时要求为24翻1,分和秒的计时要求为60进制 3、准确计时,以数字形式显示时、分、秒的时钟 4、写出设计、实验总结报告。 三、电路中主要元件及功能 1、芯片74LS290 74LS290的逻辑符号图如下: 74LS290的主要功能如下: 置“0”功能:当S9(1).S9(2)=0,且R0(1)=R0(2)=1时,计时器置“0“,即Q3 Q2 Q1 Q0=0000 置“9”功能:当S9(1)=S9(2)=1且R0(1).R0(2)=0时,计时器置“9”,即Q3 Q2 Q1 Q0=1001 计数功能:当S9(1).S9(2)=0,且R0(1).R0(2)=0时,输入计数脉冲

CP,计数器开始计数。计数脉冲由CP0输入,从Q0输出时,则构成一位二进制计数器;计数脉冲由CP1输入, Q3Q2Q1输出时,则构成异步五进制计数器;若将Q0和CP1相连,计数脉冲由CP0输入,输出为Q3Q2Q1Q0时,则构成8421BCD码异步十进制计数器;若将Q3和CP0相连,计数脉冲由CP1输入,从高位到低位输出为Q0Q1Q2Q3时,则构成5421BCD码异步十进制加法计数器。 2、芯片CD4511 CD4511的逻辑符号图如下: CD4511是一个用于驱动共阴极 LED(数码管)显示器的 BCD 码—七段码译码器,特点是:具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流,可直接驱动LED显示器。 3、芯片CD4060 CD4060逻辑符号图如下: CD4060由一振荡器和14级二进制串行计数器位组成,振荡器的结构可以是RC 或晶振电路,CR为高电平时,计数器清零且振荡器使用无效。所有的计数器位均为

带温度显示的数字时钟设计

目录 1 前言....................................................................................................................................1 2功能描述与总体方案. (2) 2.1功能描述 (2) 2.2系统组成 (2) 3硬件设计 (3) 3.1时钟电路 (3) 3.2复位电路 (3) 3.3 DS1302时钟电路 (4) 3.4 DS18B20温度计电路 (4) 3.5 按键电路 (5) 3.6 显示电路 (6) 3.7 闹铃模块电路 (7) 4软件设计 (8) 4.1 主函数流程图 (8) 4.2 18B20温度计流程图 (9) 4.3 按键电路流程图 (10) 5结语 (11) 6参考文献 (12) 7附录 (13)

前言 单片微型计算机是随着超大规模集成电路技术的发展而诞生的,由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化、智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。本文主要介绍由单片机控制的带有温度显示的电子钟的设计。随着人们生活水平的日益提高,人们对生活的要求越来越高,原有的事物已经不能满足人们的生活需求了,一些带有新功能的事物已经在慢慢的取代旧事物。就像电子钟一样,人们用电子钟不仅仅只是看时间了,人们还需要看温度了。越来越多的新功能更贴近人们的生活了,所以也越来越受人们所喜欢。带有温度的的电子钟可以使人们随时都可以了解温度的变化。本文介绍了设计的框架结构和组成模块以及各模块的原理,介绍了各部分硬件设计和各部分软件设计以及软件流程图。该设计是以AT89C51单片机为控制核心的集多种功能于一体的数字钟。该数字钟实现了具有时间显示功能;具有温度显示功能。硬件设计分为单片机控制模块、按键模块、温度模块、时钟模块、显示模块等几个部分。 功能描述与总体方案 2.1功能描述 根据主要功能要求,该设计利用51单片机实现了电子时钟、温度的显示以及设置闹铃等功能。具体可分为一下几种: (1)显示当前的时间,24时制的时、分、秒; (2)可调节时间;

LED数字显示电子时钟源程序代码

LED数字显示电子时钟源程序代码 程序:(注已完全经过调试,达到预期目的) #include #define uchar unsigned char #define uint unsigned int uchar count=0; sbit LED=P1^0; uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示数码管 0,1,3,4,5,6,7,8,9 uchar miao=0,fen=0,hour=0; void delay(uint i) //延迟函数 { uint j; for(;i>0;i--) for(j=124;j>0;j--); } void init() { ET0=1; TMOD=0x51; //选定定时器0,1和中断0,1 TH0=(65536-25000)/256; TL0=(65536-25000)%256; //设定时器0时间为250ms一次 ET1=1; TH1=0xff; TL1=0xff; //定时器1为中断 EX0=1; IT0=1; //中断0开 EX1=1; IT1=1; //中断1开 TR0=1; //定时器0开 TR1=1; //定时器1开 EA=1; //总中断开 } void display() //时钟显示函数 {

P0=tab[hour/10%10]; P2=0xfe; delay(1); P0=tab[hour%10]; P2=0xfd; delay(1); P0=tab[fen/10%10]; P2=0xfb; delay(1); P0=tab[fen%10]; P2=0xf7; delay(1); P0=tab[miao/10%10]; P2=0xef; delay(1); P0=tab[miao%10]; P2=0xdf; delay(1); } void main() //主函数 { init(); LED=0; while(1) { display(); } } void T0_int() interrupt 1 //定时器0函数{ TH0=(65536-25000)/256; TL0=(65536-25000)%256; count++; if(count==20) { count=0; miao= miao +1; LED=~LED; if(sec==60) { miao=0; fen= fen +1;

带温度显示的电子闹钟设计说明

题目:带温度显示的电子闹钟设计 摘要

本文设计了一款利用单片机技术实现带温度显示的电子闹钟。以应用AT89C51芯片作为核心,利用8位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能,同时利用DS18B20温度传感器测量环境温度。这种实现方法的优点是电路简单,性能可靠,实时性好,时间和温度精度高,操作简单,编程容易。 关键词:电子闹钟,温度,AT89C51,DS18B20,DS1302 Abstract The design determines to use the MCU technology to realize the multi-functional electron clock. This design use AT89C51 as a core chips, 8 LED digital displaying. using DS1302 real-time clock chip to complete the basic function of the clock/calendar.At the same time the design use of DS18B20 temperature sensors is for collecting the environmental temperature. The method has the advantage of being simple circuit, reliable performance, good real-time, high precision of the time and temperature, simply operation, easy programming. Key words: Electronic clock,Temperature,AT89C51,DS18B20,DS1302

数字万用表的正确使用与操作

数字万用表的正确使用与操作 数字万用表是目前最常用的一种数字仪表。其主要特点是准确度高、分辨率强、测试功能完善、测量速度快、显示直观、过滤能力强、耗电省,便于携带。进入90 年代以来,数字万用表在我国获得迅速普及与广泛使用,已成为现代电子测量与维修工作的必备仪表,并正在逐步取代传统的模拟式(即指针式)万用表。 电阻的测量: 测量步骤: 首先红表笔插入VΩ孔,黑表笔插入COM孔 量程旋钮打到“Ω”量程档适当位置 分别用红黑表笔接到电阻两端金属部分 读出显示屏上显示的数据 量程的选择和转换:

量程选小了显示屏上会显示“1.”此时应换用较之大的量程; 反之,量程选大了的话,显示屏上会显示一个接近于“0”的数,此时应换用较之小的量程。 如何读数? 显示屏上显示的数字再加上边档位选择的单位就是它的读数。要提醒的是在“200”档时单位是“?”,在“2k~200k”档时单位是“k?”,在“2M~2000M”档时单“M”。 如果被测电阻值超出所选择量程的最大值,将显示过量程“1”,应选择更高的量程,对于大于1MΩ或更高的电阻,要几秒钟后读数才能稳定,这是正常的. 当没有连接好时,例如开路情况,仪表显示为“1” 当检查被测线路的阻抗时,要保证移开被测线路中的所有电源,所有电容放电.被测线路中,如有电源和储能元件,会影响线路阻抗测试正确性。 万用表的200MΩ档位,短路时有10个字,测量一个电阻时,应从测量读数中减去这10个字。如测一个电阻时,显示为101.0,应从101.0中减去10个字.被测元件的实际阻值为100.0即100MΩ。 直流电压的测量: 测量步骤: 红表笔插入VΩ孔 黑表笔插入COM孔 量程旋钮打到V-或V~适当位置

数字电子钟设计说明..

数字电子钟课程设计 一、设计任务与要求 (1)设计一个能显示时、分、秒的数字电子钟,显示时间从00: 00: 00到23: 59: 59; (2)设计的电路包括产生时钟信号,时、分、秒的计时电路和显示电路(3)电 路能实现校正 (5)整点报时 二、单元电路设计与参数计算 1. 振荡器 石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整。它还具有压电效应,在晶体某一方向加一电场,则在与此垂直的方向产生机械振动,有 了机械振动,就会在相应的垂直面上产生电场,从而机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限止时,才达到最后稳定。这用压电谐振的频率即为晶体振荡器的固有频率。 2. 分频器 由于振荡器产生的频率很高,要得到秒脉冲需要分频,本实验采用一片74LS90 和两片74LS160实现,得到需要的秒脉冲信号。

3. 计数器 秒脉冲信号经过计数器,分别得到“秒”个位、十位、“分”个位、十位以及 “时”个位、十位的计时。“秒” “分”计数器为六十进制,小时为二十四进制。 (1)六十进制计数 由分频器来的秒脉冲信号,首先送到“秒”计数器进行累加计数,秒计数器应完 成一分钟之内秒数目的累加,并达到 60秒时产生一个进位信号。本作品选用一 片74LS161和一片74LS160采取同步置数的方式组成六十进制的计数器。 (2)二十四进制计数 “24翻1”小时计数器按照“ 00— 01—02,, 22—23— 00—01”规律计数。与生 活中计数规律相同。二十四进制计数同样选用74LS161和74LS160计数芯片。但 清零方式采用的是异步清零方式。 MMgM 加 EHagij Z 1 进位信号 脉冲

基于51单片机的电子日历+温度显示设计

2 电子日历设计与实现 2.1 任务分析 一、功能 本设计要求具有显示生肖、年、月、日、星期、时、分、秒等功能;阳历与阴历能够自动关联;具有温度计功能;具备年、月、日、星期、时、分、秒校准功能;设计最终达到效果如图2-1。 图2-1 设计效果图 二、系统原理 按照系统设计功能的要求,系统由单片机、时钟模块DS1302、显示模块12864、键盘以及温度采集模块DS18B20共5部分电路组成,电路构成框图如图2-2所示。 图2-2 系统设计原理框图 三、系统硬件要求 本设计电路采用AT89S51单片机为控制核心,AT89S51具有在线编程功能,低功耗,能在3V超低压工作。时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。DS1302内部有一个用于临时性存放数据的31*8RAM寄存器。器件在加电情况下,可自动生成年、月、日、周、时、分、秒时间数据,该器件具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。 温度的采集采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,温度传感器DS18B20还具有测量精度高、

测量范围广等优点。显示部分用12864LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形,显示多样,清晰可见,能够达到较好的显示效果。 2.2电路设计 一、单片机主控制模块的设计 AT89S51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。 单片机的最小系统如图3-1所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端,单片机电路如图2-3 所示。 图2-3 单片机电路 二、时钟电路模块的设计 DSl302数据操作原理: DSl302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。 DS1302的引脚连接如图2-4所示。其中VCC1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由VCC1或VCC2两者中的较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。当VCC2

DIY高准确度电压基准2

DIY高准确度电压基准 作者:BG2VO 网站:哈罗CQ 火腿社区 转载处:https://www.wendangku.net/doc/3417545106.html,/forum/showthread.php?t=139719&page=1&pp=30

版权声明 ●全文为BG2VO在哈罗CQ 火腿社区内的帖子整理而成,(BG2VO为本文作者的呼号及 哈罗CQ 火腿社区注册名,下同),因此,作者BG2VO对文章及本发布拥有最终解释权。作者有权更改或取消本声明中的内容,并对修改时版本拥有全部版权。 ●为方便文章传播及改正文中错误,在作者提出其它要求前,将使用以下协议进行发布: 本文遵从署名-非商业性使用-相同方式共享 2.5 中国大陆创作共享协议。 您可以自由: 复制、发行、展览、表演、放映、广播或通过信息网络传播本作品 创作演绎作品 惟须遵守下列条件: 署名. 您必须按照作者或者许可人指定的方式对作品进行署名。 非商业性使用. 您不得将本作品用于商业目的。 相同方式共享. 如果您改变、转换本作品或者以本作品为基础进行创作,您只能采用与 本协议相同的许可协议发布基于本作品的演绎作品。 对任何再使用或者发行,您都必须向他人清楚地展示本作品使用的许可协议条款。 如果得到著作权人的许可,您可以不受任何这些条件的限制。 Nothing in this license impairs or restricts the author's moral rights. 您的合理使用以及其他权利不受上述规定的影响。 这是一份普通人可以理解的法律文本(许可协议全文)的概要。

更新历史: ●Rev.1 整理编辑成书 phenguin 2008-03-18 整理时间有限,确有纰漏,望见谅;如对文档整理及编排有疑问,可联系本人phenguin (phenguinmail@https://www.wendangku.net/doc/3417545106.html,)

基于单片机的带温度显示的数字钟设计(c51语言编程)【开题报告】

开题报告 电气工程及其自动化 基于单片机的带温度显示的数字钟设计(c51语言编程) 一、课题研究意义及现状 1980年因特尔公司推出了MCS-51单片机,近30年来,其衍生系列不断出现,从Atmel加入FLASH ROM,到philips加入各种外设,再到后来的Cygnal推出C8051F,使得以8051为核心的单片机在各个发展阶段的低端产品应用中始终扮演着一个重要的角色,其地位不断升高,资源越来越丰富,历经30年仍在生机勃勃地发展,甚至在SoC时代仍占有重要的一席之地。 单片机具有体积小、功能强、低功耗、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域智能仪表、机电一体化、实时控制、国防工业普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 C语言已经成为当前举世公认的高效简洁而又贴近硬件的编程语言之一。将C语言向单片机8051上移植十余20世纪80年代的中后期,经过几十年的努力,C语言已成为专业化单片机上的实用高级语言。C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。 与汇编语言相比,C51在功能、结构、可读性、可维护性上有明显的优势,因而易学易用。另外C51可以缩短开发周期,降低成本,可靠性,可移植性好。因此,使用C语言进行程序设计已成为软件开发的一个主流,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。 随着人们生活水平的提高,对物质需求也越来越高,人们已不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如环境温度显示、日历的显示、重要日期倒计时、显示跑表功能等,用以带来更大的方便。而所有这些,又都是以数字化的电子时钟为基础的,不仅应用了数字电路技术,而且还加入了需要模拟电路技术和单片机技术。其电路可以由时钟模块、人机接口模块、环境温度检测模块等部分组成。比机械式时钟具有更高的直观性和准确性,调节起来方便,且无机械装置,能够使用更长时间,并且方便维护保养,因此得到了广泛的使用。数字钟已成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。因此,研究实用数字钟及其扩展应用,具有很大的实用价值。二、课题研究的主要内容和预期目标 学习51单片机的基础知识熟悉其基本模块的使用、使用HD7279驱动LED数码管显示、键盘扫描和16位键盘的输入、以及温度传感器DS18B20的温度采集等。利用C51编程实现一个带温度计的

相关文档
相关文档 最新文档