基于ATmega16单片机的电子时钟设计
基于单片机电子时钟的设计与实现
基于单片机电子时钟的设计与实现一、设计目标设计一个基于单片机的电子时钟,能够准确显示时间并能够进行设置和调整。
二、硬件设计1.时钟部分:采用晶振芯片提供准确的时钟信号2.数码管显示部分:使用共阴数码管进行数字显示3.按键部分:设计几个按键用于设置和调整时间4.电源部分:采用直流电源供电三、软件设计1.功能设计a.时间设置功能:通过按键可以设置当前的时间,包括小时、分钟和秒钟。
b.时间调整功能:通过按键可以调整当前的时间,包括小时、分钟和秒钟。
c.时间显示功能:通过数码管可以实时显示当前的时间。
2.代码实现以C语言为例,以下是一个基于单片机的电子时钟的代码实现示例:```c#include <reg51.h>sbit DS18B20=P1^3; // 定义18B20数据线接口sbit beep=P2^3; // 定义蜂鸣器接口unsigned char hour,min,sec; // 定义小时、分钟、秒钟变量//函数声明void Delay_1ms(unsigned int count);bit Ds18b20Init(;unsigned char Ds18b20ReadByte(;void ReadTime(;void WriteTime(;void DisplayTime(;//主函数void mainP2=0x00;WriteTime(; // 写入时间while(1)ReadTime(; // 读取时间DisplayTime(; // 显示时间Delay_1ms(1000); // 延时1秒}//毫秒延时函数void Delay_1ms(unsigned int count) unsigned int i, j;for(i=0; i<count; i++)for(j=0; j<1275; j++);//18B20初始化函数bit Ds18b20Initbit presence;DS18B20=0;Delay_1ms(100); // 延时450us~1000us DS18B20=1;Delay_1ms(10); // 延时15us~60us presence=DS18B20;Delay_1ms(30); // 延时60us~240us return presence;//18B20读取字节函数unsigned char Ds18b20ReadByte unsigned char i, dat;for(i=0; i<8; i++)DS18B20=0;//主机发起读时序_nop_(; // 延时1us_nop_(; // 延时1us_nop_(; // 延时1usDS18B20=1;//主机释放总线_nop_(; // 延时1us_nop_(; // 延时1us_nop_(; // 延时1usdat,=(DS18B20<<i); // 读取数据位,存放在dat变量中Delay_1ms(3); // 读时序完成后等待48us再接收下一位}return dat;//读取时间函数void ReadTimeunsigned char temp;temp=0x00;while(temp!=0xaa)Ds18b20Init(; // 初始化温度传感器Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0xbe;Delay_1ms(1);temp=Ds18b20ReadByte(; // 读取时间数组的标志位}for(temp=0; temp<7; temp++)//写入时间函数void WriteTimeunsigned char i,j;while(1)Ds18b20Init(;Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0x4e;Delay_1ms(1);for(i=0; i<7; i++)DS18B20=0x55;Delay_1ms(1);DS18B20=0xaa;Delay_1ms(1);Ds18b20Init(;Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0x48;Delay_1ms(1);j=Ds18b20ReadByte(; // 判断是否写入成功if(j==0x0a)break;}//显示时间函数void DisplayTimeP1=seg[hour/10]; // 显示十位小时P2=(P2&0xf0),0x08; // 点亮第一个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[hour%10]; // 显示个位小时P2=(P2&0xf0),0x04; // 点亮第二个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[min/10]; // 显示十位分钟P2=(P2&0xf0),0x02; // 点亮第三个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[min%10]; // 显示个位分钟P2=(P2&0xf0),0x01; // 点亮第四个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=0x00;//空显示P2=0x00;//熄灭数码管```四、总结通过以上的硬件设计和软件实现,可以实现一个基于单片机的电子时钟。
基于avr-Atmega16单片机实现六位时钟程序-并用proteus仿真
基于avr-Atmega16单片机实现六位时钟程序,并用proteus仿真#include<iom16v.h>#define uchar unsigned char#define uint unsigned intuchar SEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar ACT[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};ucharsec=0,min=0,ms_sec=0,hr=0,cnt=0,set_sec=0,set_min=0,set_hr=0,key_cnt=0,flag1=0,flag2=0,i=0 ,j=0,k=0;void delay_ms(uint k){uint i,j;for(i=0;i<k;i++){for(j=0;j<1000;j++);}}void port_init(void){DDRA=0XFF;PORTA=0XFF;DDRB=0XFF;PORTB=0X00;DDRC=0XFF;PORTC=0XFF;DDRD=0X00;PORTD=0XFF;}void timer_init(void){TCNT0=0X83;TCCR0=0X03;TIMSK=0X01;}void W_EEP(uchar add,uchar dat){while(EECR&(1<<EEWE));EEAR=add;EEDR=dat;EECR|=(1<<EEMWE);EECR|=(1<<EEWE);}uchar R_EEP(uchar add){while(EECR&(1<<EEWE));EEAR=add;EECR|=(1<<EERE);return EEDR;}//10非常重要#pragma interrupt_handler timer_isr:10 void timer_isr(void){TCNT0=0X83;if(++key_cnt>5)key_cnt=0;if(++cnt>5)cnt=0;if(++ms_sec>99){sec++;ms_sec=0;}if(sec>59){min++;sec=0;}if(min>59){hr++;min=0;}if(hr>24)hr=0;if(key_cnt==0){if((PIND&0X80)==0){if(set_sec<59)set_sec++;else set_sec=0;delay_ms(30);}if((PIND&0X40)==0){if(set_min<59)set_min++;else set_min=0;delay_ms(30);}if((PIND&0X20)==0){if(set_hr<24)set_hr++;else set_hr=0;delay_ms(30);}}if(flag1==0){i=sec,j=min,k=hr;}else{i=set_sec,j=set_min,k=set_hr;}switch(cnt){case 0:/*if(flag1=1){PORTB=ACT[0];PORTA=SEG[set_sec%10];}else {*/PORTB=ACT[0];PORTA=SEG[i%10];// }break;case 1:/*if(flag1=1){PORTB=ACT[1];PORTA=SEG[set_sec/10];}else {*/PORTB=ACT[1];PORTA=SEG[i/10];//}break;case 2:/*if(flag1=1){PORTB=ACT[2];PORTA=SEG[set_min%10];}else {*/PORTB=ACT[2];PORTA=SEG[j%10];//}break;case 3:/*if(flag1=1){PORTB=ACT[2];PORTA=SEG[set_min%10];}else {*/PORTB=ACT[3];PORTA=SEG[j/10];//}break;case 4:/*if(flag1=1){PORTB=ACT[2];PORTA=SEG[set_hr%10];}else {*/PORTB=ACT[4];PORTA=SEG[k%10];//}break;case 5:/*if(flag1=1){PORTB=ACT[2];PORTA=SEG[set_hr%10];}else {*/PORTB=ACT[5];PORTA=SEG[k/10];//}break;default:PORTB=0X00;PORTA=0XFF;break;}}void main(void){uchar n;port_init();timer_init();SREG=0X80;while(1){if((PIND&0X08)==0){flag1=1;}else flag1=0;if((PIND&0x04)==0){SREG=0X00;W_EEP(200,set_sec);delay_ms(20);W_EEP(201,set_min);delay_ms(20);W_EEP(202,set_hr);delay_ms(20);SREG=0X80;}if(sec==R_EEP(200)&&min==R_EEP(201)&&hr==R_EEP(202)) {flag2=1;}if((PIND&0X10)==0)flag2=0;if(flag2==1){PORTC=0X00;delay_ms(20);PORTC=0XFF;delay_ms(20);}}}。
基于AVR单片机Mega16的电子时钟设计
t e Ba i , C, a d o h rh g ~ e e a g a e p o r mmi gT e ee t n c co k w ih i d ig e y Me a 6 i n to l h sc n t e ih lv ll n u g r g a n . h l cr i l c h c s es n d b g l s o n y o lw— o t smp e h r w r , b t a y t c i v y tm g a inT e d sg t o f l er i lc a e n t e AVR o c s, i l a d a e u s o a h e e s se mi r t .h e in me h d o e ti c co k b s d o h e o e o Me a 6 al h r c e CD1 0 s ito u e n t i p p r n h o r s o d n i u te e t o i n o a g a d c d i h S a e , d t e c re p n i g cr i l cr n c a d s me ln u g a c i
中 图分 类 号 : P 7 T 23
文献 标 识 码 : A
文 章 编 号 :0 6 6 7 (0 80 = 0 80 10 - 9 720 )7 0 1 - 2
De i n o n l c r ni l c b s d n AVR e a1 sg fa e e t o c co k a e o M g 6
摘 要 : g1 Mea 6是 一 款 采 用先 进 R S IC精 简指 令 , 内置 A D 的 8 单 片机 , 支 持 低 电压 联 机 Fah和 E P O 写入 功 / 位 可 ls ER M 能 : 时还 支持 B s 同 ai C 等 高级 语 言编 程 。 c和 用它 设 计 电子 时 钟 不 仅 成 本 低 , 件 简单 , 且 很 容 易实 现 系统 移 植 。 硬 而 介
AVR——Mega16制作的电子时钟(仿真图+源程序)
{ fen=0; shi++; if(shi==24)
{ shi=0; } }
}
TCNT1H=0X8f; TCNT1L=0X80; }
绥化学院电子协会 2010 级耿国辉
QQ:835751934
PORTA=0X00; PORTC=0X00; PORTB=0X07; }
/*************定时器初始化*************/ void timer1_init(void)
{ TCCR1B=0X04; //256 分频 TCNT1H=0X8f; TCNT1L=0X80; TIMSK|=BIT(2); //定时器中断使能位 SREG|=BIT(7); //设置总中断 } /*************按键扫描*****************/ void key_scan() {
PORTA=0X00;
PORTA=table[fen/10];
//5
PORTC=tab[3];
delay(1);
PORTA=0X00;
PORTA=0x40;
பைடு நூலகம்
//6
PORTC=tab[2];
delay(1);
PORTA=0X00;
PORTA=table[shi%10];
//7
PORTC=tab[1];
delay(1);
PORTA=0X00;
PORTA=table[shi/10];
//8
PORTC=tab[0];
delay(1);
PORTA=0X00;
} /************主函数*****************/ void main(void) { init(); //初始化 timer1_init(); while(1)
小学期单片机实验设计报告
多功能闹钟设计报告功能设计:1.设计目的:通过应用ATmega16单片机和LCD1602液晶显示屏等器件,实现一个多功能闹钟的以下功能:时钟的时分秒的显示及重置,闹钟时间设置,整点报时,时间模式转换,同时用喇叭来进行定时提醒和铃音播放。
2.设计思路:通过视频的学习,设计方案是以ATmega16单片机为核心,采用LCD1602液晶显示屏,4*4按键,蜂鸣器,包括时钟调整模块,闹钟模块,键盘时间预设值等模块,所构建的数字多功能闹钟,能够实现时钟的时分秒的显示及重置,闹钟时间设置,时间模式转换,同时用喇叭来进行定时提醒和铃音播放。
即可以将闹钟分为液晶显示屏,按键,喇叭,单片机芯片四个模块。
3.功能说明:(1)时间设置采用C语言程序设计,使单片机控制液晶屏显示时,分,秒,当秒计数计满60时就向分进位,分计满60时就向时进位。
时间显示有24小时模式和12小时模式,24小时制按小时“23翻0”规律计数,12小时制按“11翻0”规律计数。
同时有上午AM和下午PM标志提醒。
(2)整点报时功能当闹钟计时到整点时,会自动启动报时机制。
蜂鸣器会响起,提醒整点已到。
(3)LCD液晶显示实用液晶显示时间,年月日可以自行设置,格式为00—00—00,例如2014—10—01,时间也可以自行设置,格式为00:00:00,星期以数字显示。
(4)校时功能可以分别对时,分,秒进行单独校时,使其校正到标准时间(5)闹钟功能当时间到达整点,蜂鸣器进行蜂鸣报时,设置闹钟后,达到闹钟设定时间播放音乐,闹铃音乐可以在任何时间按任意键强行停止。
(6)通过控制4*4键盘,实现时间调整,闹钟设置,音乐选择,24制时间转换等功能,并同时在液晶屏上显示。
模块说明:Amega16ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512 字节EEPROM,1K 字节SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/ 计数器(T/C)。
基于ATmega16单片机的电子时钟设计_毕业设计
如表 2 所示。
表 2 控制命令表
序号
指令
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1
清屏
0
0
0
0
0
0
0
0
01
2
光标返回
0
0
0
0
0
0
0
0
1*
3
输入方式
0
0
0
0
0
0
0
1 I/D S
4
显示开关
0
0
0
0
0
0
1
D
CB
5
移位
0
0
0
0
0
1 S/C R/L * *
6
功能设置
0
0
0
0
1 DL N
F
B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令 6:功能设置命令
DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字符 指令 7:字符发生器 RAM 地址设置 指令 8:DDRAM 地址设置 指令 9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接 收命令或者数据,如果为低电平表示不忙。 指令 10:写数据 指令 11:读数据 3.3 162 液晶显示屏的时序 在操作液晶屏,我们应该对它的工作时序非常熟悉,这里介绍了 162 液晶显 示屏的两个写时序:写指令和写入数据。 写指令,即设置 162 液晶显示屏的工作方式:需要把 RS 置为低电平,RW 置 为低电平,然后将数据送到数据口 D0~D7,最后 E 引脚一个高脉冲将数据写入。 写数据,即在液晶屏上实现显示时:需要把 RS 置为高电平,RW 置为低电平, 然后将数据送到 D0~D7,最后 E 引脚一个高脉冲将数据写入。
基于单片机的电子时钟的设计与实现
基于单片机的电子时钟的设计与实现电子时钟是一种使用微处理器或单片机作为主控制器的数字时钟。
它不仅能够显示当前时间,还可以具备其他附加功能,如闹钟、日历、温度显示等。
一、设计目标设计一个基于单片机的电子时钟,实现以下功能:1.显示时间:小时、分钟和秒钟的显示,采用7段LED数码管来显示。
2.闹钟功能:设置闹钟时间,到达设定的时间时会发出提示音。
3.日历功能:显示日期、星期和月份。
4.温度显示:通过温度传感器获取当前环境温度,并显示在LED数码管上。
5.键盘输入和控制:通过外部键盘进行时间、日期、闹钟、温度等参数的设置和调整。
二、硬件设计1.单片机选择:选择一款适合的单片机作为主控制器,应具备足够的输入/输出引脚、中断和定时器等功能,如STC89C522.时钟电路:使用晶振为单片机提供稳定的时钟源。
3.7段LED数码管:选择合适的尺寸和颜色的数码管,用于显示小时、分钟和秒钟。
4.温度传感器:选择一款适合的温度传感器,如DS18B20,用于获取环境温度。
5.喇叭:用于发出闹钟提示音。
6.外部键盘:选择一款适合的键盘,用于设置和调整时间、日期、闹钟等参数。
三、软件设计1.初始化:设置单片机定时器、外部中断和其他必要的配置。
2.时间显示:通过定时器中断,更新时间,并将小时、分钟和秒钟分别显示在相应的LED数码管上。
3.闹钟功能:设置闹钟时间,定时器中断检测当前时间是否与闹钟时间一致,若一致则触发警报。
4.日历功能:使用定时器中断,更新日期、星期和月份,并将其显示在LED数码管上。
5.温度显示:通过定时器中断,读取温度传感器的数据,并将温度显示在LED数码管上。
6.键盘输入和控制:通过外部中断,读取键盘输入,并根据输入进行相应的操作,如设置时间、闹钟、日期等。
7.警报控制:根据设置的闹钟时间,触发警报功能,同时根据用户的设置进行控制。
四、测试与调试完成软件设计后,进行系统测试与调试,包括验证显示时间、日期、温度等功能的准确性,以及闹钟和警报功能的触发与控制。
ATmega16做的时钟
OCR0=0xf9; OCR0=249,(249+1)(125kHz)=2ms;
TCCR0=0x0a; 1MHz8=125kHz,CTC模式
TC1初始化
TCCR1A=0x40;
TCCR1B=0x08;
TIMSK=0x12; 使能TC1比较匹配A中断,使能TC0比较匹配中断
PORTB=BIT(0);
PORTB&=~BIT(0); 锁存
PORTA=led_7[dis_buff[posit]];
if(set_on&&(posit==clock_state)) PORTA=0x00; 校时闪烁
if(point_on&&(posit==1posit==3)) PORTA=0x80; 秒闪烁
while(1)
{
if(time_1s_ok)
{
time_1s_ok=0;
point_on=!point_on;
if(++time[2]=60) 秒加一
{
time[2]=0;
if(++time[1]=60)
#define key_input PINC
#define key_mask 0b11000000 按键输入屏蔽码
#define key_no 0
#define key_k1 1
#define key_k2 2
#define key_state_0 0
#define key_state_1 1
if(!play_on)
{
note_n=0;
int_n=1;
基于mega16单片机的数字时钟实验报告
}
else
{
if(read_key_6())
{
if(tiaowei==0)
tiaowei=6;
else
tiaowei--;
}
temp1 = tiaowei%2; //检测tiaowei为奇数还是偶数
temp2 = tiaowei/2; //确定调整的是time数组的第几个
if(temp1 >=2)
4
对数码管进行编码,从右到左依次是,0;1;2;3;4;5;定义tiaowei的状态来判断哪个数码管闪亮且对其调整。Tiaowei的初始值为6,此时没有数码管闪亮,且不对任何值进行调整。当每检测到一次key2的按键时tiaowei自动减一次1,且对该编码的数码管进行半秒钟亮一次的操作和通过key1的按键来实现对其对应时钟的位进行调整。如下是其调整的部分代码:
else //调节分钟或者秒位
{
if(temp1) //调节分钟或者秒的十位
{
time[temp2]=time[temp2]+10;
if(time[temp2]>=60)
time[temp2]=的个位
{
time[temp2]++;
temp5=time[temp2]%10;
}
8
本闹铃的音乐为林俊杰--《可惜没如果》。采用15个音符,即低音区和高音区的各7个音符和高音区的第一个音符。
从网上查找资料,下图为其音符对应的不同频率:
写出的CTC模式下产生一定频率所需的计数值和基本单位时间值代码如下:
flash unsigned int t[16] = {262143,1908,1701,1515,1433,1276,1136,1012,956,865,759,716,638,568,506,470};
LCD12864液晶显示电子钟设计
LCD12864液晶显示电子钟设计
介绍:
设计目标:
设计一个能够实时显示时间和日期的电子钟,能够精确地获取当前的时间,并对用户的操作作出相应的响应。
设计原理:
该电子钟设计采用了单片机ATmega16作为核心,配合RTC(实时时钟)模块,通过控制液晶显示屏来显示时间和日期。
硬件设计:
1.电源电路:使用直流电源电压为5V,通过稳压芯片将输入电压稳定在5V。
2.单片机电路:将ATmega16与晶振、复位电路、电源电路等连接起来。
3.RTC电路:通过连接RTC芯片和单片机,实现对实时时钟的读取和控制功能。
4.液晶显示屏电路:将液晶显示屏与单片机进行连接,通过单片机控制液晶显示屏的显示。
软件设计:
1.初始化:对单片机和RTC进行初始化设置。
2.获取时间:从RTC读取当前时间和日期。
3.显示时间:将获取到的时间和日期分别显示在液晶显示屏的相应位置。
4.操作功能:通过按键控制,实现对时间和日期的调整和设置功能。
设计步骤:
1.确定电路设计需求和所需元器件。
2.搭建硬件电路,完成电路连接。
3.使用相关软件进行单片机和RTC的编程设置。
4.测试整个电路是否能够正确工作,如对时间进行调整并观察液晶显示屏的显示是否准确。
5.根据需求进行适当的优化和完善设计。
总结:。
基于ATmega16单片机的简易秒表的设计与制作
基于ATmega16单片机的简易秒表的设计与制作作者:王新娜孙新凤来源:《硅谷》2011年第23期摘要:在体育竞技等场合中,要经常用到秒表,提供一种简易秒表的设计与制作,使用这种方案制作的秒表,定时准确,定时精度最高可达到微秒级别,通过按下按键可以将显示时间停止在当前状态,按下另一按键还可以继续进行计时。
关键词:秒表;Atmega16;定时器/计数器中图分类号:S241 文献标识码:A 文章编号:1671-7597(2011)1210059-010 前言秒表是一种常用的测时仪器,常规的秒表的制作方法有两种,一种是采用电子电路搭建而成,这种电路的搭建需要制作者具有一定的模拟和数字电子电路基础,另外这种秒表的定时时间范围较为固定。
还有一种方法就是使用智能芯片,通过编程来实现定时功能,从而实现秒表的制作。
这种方法制作的秒表,可以通过软件更改程序参数灵活的调节定时范围及定时精度,使用较为灵活,且简单易懂。
本文采用AVR单片机作为主控芯片,配以相应的外围电路,实现简易秒表的设计与制作。
1 硬件电路设计本系统的硬件构成主要有单片机的主控模块、显示模块以及主令模块。
主控模块以ATmega16单片机为控制核心,配以最小工作系统必要的外围电路,如复位电路、晶振电路、电源电路等;显示模块采用5个LED数码管,主要用于定时显示,显示内容为“秒值-百分之N 秒”;主令模块主要由按键组成,以实现系统的人机交互功能。
其系统组成如图所示。
简易秒表系统框图1.1 ATmega16单片机。
ATmega16单片机的美国Atmel公司生产的AVR系列单片机的高档产品之一,是一款基于AVR RISC的低功耗COMS的8位高性能单片机。
通常在一个时钟周期内执行一条指令,ATmega16可以取得接近1MIPS/MHz的性能,在功耗和执行速度之间取得平衡[1]。
同时,该型号单片机采用Flash技术,具有在线编程功能,调试系统非常方便,程序的存储空间达16k字节,I/O口均可进行位寻址。
基于单片机的电子时钟设计
基于单片机的电子时钟设计
要设计基于单片机的电子时钟,需要以下步骤:
1. 选择适合的单片机:根据具体的应用要求和芯片性能、价格等方面的考虑,选择一款适合的单片机。
常用的单片机有PIC、AVR、8051等。
2. 确定时钟显示方式:可以选择使用数码管、点阵字体、LCD液晶等显示方式。
需要考虑到显示效果、成本、功耗等因素。
3. 确定时钟计时方式:时钟可以通过外部晶体振荡电路、内部RC振荡电路等方式计时。
需要根据使用要求和单片机性能选择合适的计时方式。
4. 实现时间的设置和显示功能:可以通过按钮、旋钮等方式设置时间,并通过单片机控制实现时间的显示。
需要考虑到界面友好性、操作方便性等因素。
5. 实现闹钟功能:可以通过设置闹钟时间和闹铃音乐等方式实现闹钟功能,需要根据使用要求和单片机性能选择合适的硬件和软件实现方式。
6. 网络同步时间:可以通过接收网络时间协议(NTP)来实现网络同步时间,需要考虑到网络连接稳定性、实时性等因素。
7. 考虑功耗和电源电路设计:需要考虑到电子时钟的使用场景和电源供应方式,选择合适的工作电压和功耗设计、电源管理等方面的问题。
以上是设计基于单片机的电子时钟的主要步骤,需要根据具体的应用需求和技术水平进行具体的实现。
本科毕业设计--基于atmega16单片机的电子时钟设计
基于ATmega16单片机的电子时钟设计物理与电子工程学院电子信息科学与技术专业(职教)2009级罗德龙指导教师宋培森摘要:随着科学技术的发展电子时钟在日常的生活中应用的相当的多。
本文介绍了一款基于ATmega16单片机为主控芯片的数字电子时钟设计。
其中主要包括ATmega16单片机、独立键盘、DS1302芯片、LCD1602液晶显示、以及相关外围电路并在PROTUES仿真平台上运行。
关键词:ATmega16单片机;DS1302芯片;独立键盘;LCD1602Abstract:With the development of science and technology electronic clock in the daily life of the application is quite long. This paper introduces a single chip processor as the main control chip based on ATmega16 digital electronic clock design. Include ATmega16 microcontroller, independent keyboard, DS1302 chip LCD1602, liquid crystal display (LCD), and related peripheral circuit and in PROTUES simulation platform operation.Key words:ATmega16 microcontroller;DS1302 chip;Independent keyboard;LCD1602 1 前言液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧等许多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
本文中详细介绍了基于ATmega16单片机控制下的162液晶屏显示设计,此设计基于ds1302的时钟电路方便实用,电路设计简单。
ATmega16基于1302的时钟
/ICC-A VR application builder : 2005-01-04 04:58:01 // Target : M16// Crystal: 4.0000Mhz#include <iom16v.h>#include <macros.h>#define IO PB5#define SCLK PB7#define RST PB4#define IO_0 PORTB&=~BIT(IO)#define IO_1 PORTB|=BIT(IO)#define SCLK_0 PORTB&=~BIT(SCLK)#define SCLK_1 PORTB|=BIT(SCLK)#define RST_0 PORTB&=~BIT(RST)#define RST_1 PORTB|=BIT(RST)#define IO_PULL PORTB|=BIT(IO)#define IO_in DDRB&=~BIT(IO)#define IO_READ (PINB&(BIT(IO)))#define IO_OUT DDRB|=BIT(IO)#define RS PD1#define E PD0#define RS_0 PORTD&=~BIT(RS)#define RS_1 PORTD|=BIT(RS)#define E_0 PORTD&=~BIT(E)#define E_1 PORTD|=BIT(E)#define jinru !(PIND&(BIT(PD2)))#define xuanze !(PIND&(BIT(PD3)))#define jia !(PIND&(BIT(PD4)))#define tuichu !(PIND&(BIT(PD5)))unsigned char sec=0x35,min=0x10,hour=0x17,date=0x24,month=0x12,year=0x10,day=0x05;void delay(unsigned int m){unsigned int i,j;for(i=0;i<m;i++)for(j=0;j<570;j++);}void port_init(void){PORTA = 0x00;DDRA = 0xff;PORTB = 0x00;DDRB = 0xB0;PORTC = 0x00; //m103 output onlyDDRC = 0xff;PORTD = 0x3c; //启动PD2-PD5上拉DDRD = 0x03;}//call this routine to initialize all peripheralsvoid init_devices(void){//stop errant interrupts until set upCLI(); //disable all interruptsport_init();MCUCR = 0x00;GICR = 0x00;TIMSK = 0x00; //timer interrupt sourcesSEI(); //re-enable interrupts//all peripherals are now initialized}//void signle_byte_write(unsigned char addcom,unsigned char data) {unsigned char i;IO_OUT;RST_0;SCLK_0;RST_1;for(i=0;i<8;i++){if(addcom&(BIT(i)))IO_1;else IO_0;SCLK_0;SCLK_1;}for(i=0;i<8;i++){if(data&(BIT(i)))IO_1;else IO_0;SCLK_0;SCLK_1;}SCLK_0;RST_0;}unsigned char signle_byte_read(unsigned char addcom) {unsigned char i,data=0x00;IO_OUT;RST_0;SCLK_0;RST_1;for(i=0;i<8;i++){if(addcom&(BIT(i)))IO_1;else IO_0;SCLK_0;SCLK_1;}IO_PULL;IO_in;for(i=0;i<8;i++){SCLK_1;SCLK_0;if(IO_READ)data|=BIT(i);}SCLK_0;RST_0;return data;}void wcom(unsigned char com){RS_0;NOP();E_1;NOP();PORTC=com;NOP();E_0;delay(2);}void wdata(unsigned char data){RS_1;NOP();E_1;NOP();PORTC=data;NOP();E_0;delay(1);}void init_1602(void){unsigned char i;wcom(0x01);wcom(0x02);wcom(0x06);wcom(0x0c);wcom(0x14);wcom(0x38);}void init_1302(void){//if(signle_byte_read(0xc1)!=0x55){signle_byte_write(0x8E,0X00); //关闭写保护signle_byte_write(0x80,sec);signle_byte_write(0x82,min);signle_byte_write(0x84,hour);signle_byte_write(0x86,date);signle_byte_write(0x88,month);signle_byte_write(0x8a,day);signle_byte_write(0x8c,year);//signle_byte_write(0xc0,0X55); //在RAM0单元中写入始始设定标志数据signle_byte_write(0x90,0Xaa); //启动充电signle_byte_write(0x8E,0X80); //打开写保护}}void read1302(void){sec=signle_byte_read(0x81);min=signle_byte_read(0x83);hour=signle_byte_read(0x85);date=signle_byte_read(0x87);month=signle_byte_read(0x89);day=signle_byte_read(0x8b);year=signle_byte_read(0x8d);}void xianshi_1602(void){wcom(0x80);//设置DDRAM地址wdata('2');wdata('0');wdata(year/0x10+'0');wdata(year%0x10+'0');wdata('-');wdata(month/0x10+'0');wdata(month%0x10+'0');wdata('-');wdata(date/0x10+'0');wdata(date%0x10+'0');wcom(0x8b);wdata('X');wdata('Q');wdata(':');wdata(day+'0');wcom(0xc0);//设置DDRAM地址wdata(hour/0x10+'0');wdata(hour%0x10+'0');wdata('-');wdata(min/0x10+'0');wdata(min%0x10+'0');wdata('-');wdata(sec/0x10+'0');wdata(sec%0x10+'0');//加0的ASCII码就是将数字转成相应的ASCII码}unsigned const guangbiao[]={0x83,0x86,0x89,0x8e,0xc1,0xc4,0xc7,};void tiaoshi(void){unsigned char youxiao=0x00;unsigned char guangbiaodizhi=0;if(jinru){delay(100);while(jinru);youxiao=0x01;wcom(0x0f);//开光标wcom(0x83);//光标指向0X83即年的位置}while(youxiao){if(xuanze){delay(100);while(xuanze);guangbiaodizhi++;if(guangbiaodizhi>6)guangbiaodizhi=0;wcom(guangbiao[guangbiaodizhi]);//光标指向0X83即年的位置}if(jia){delay(100);while(jia);switch (guangbiaodizhi){case 0:{year++;if((year%0x10)>0x09){year&=0xf0;//低四位清零year+=0x10;//高四位加1if((year/0x10)>0x09)year=0x00;}}break;case 1:{month++;if((month%0x10)>0x09){month&=0xf0;//低四位清零month+=0x10;//高四位加1}if(month>0x12)month=0x01;}break;case 2:{date++;if((date%0x10)>0x09){date&=0xf0;//低四位清零date+=0x10;//高四位加1}if(date>0x31)date=0x01;}break;case 3:{day++;if(day>0x07)day=0x01;}break;case 4:{hour++;if((hour%0x10)>0x09){hour&=0xf0;//低四位清零hour+=0x10;//高四位加1}if(hour>0x23)hour=0x00;}break;case 5:{min++;if((min%0x10)>0x10){min&=0xf0;//低四位清零min+=0x10;//高四位加1}if(min>0x60)min=0x00;}break;case 6:{sec++;if((sec%0x10)>0x10){sec&=0xf0;//低四位清零sec+=0x10;//高四位加1}if(sec>0x60)sec=0x00;}break;}xianshi_1602();wcom(guangbiao[guangbiaodizhi]);}if(tuichu){delay(100);while(tuichu);youxiao=0x00;wcom(0x0c);//关光标signle_byte_write(0x8E,0X00); //关闭写保护//signle_byte_write(0xc0,0X00); //清除在RAM0单元中写入始始设定标志数据init_1302();}}}void main(void){init_devices();init_1602();//insert your functional code here... init_1302();while(1){read1302();xianshi_1602();tiaoshi();}}。
基于ATmega16单片机的电子时钟设计20130504综述
基于ATmega16单片机的电子时钟设计物理与电子工程学院电子信息科学与技术专业(职教)2009级罗德龙指导教师宋培森摘要:随着科学技术的发展电子时钟在日常的生活中应用的相当的多。
本文介绍了一款基于ATmega16单片机为主控芯片的数字电子时钟设计。
其中主要包括ATmega16单片机、独立键盘、DS1302芯片、LCD1602液晶显示、以及相关外围电路并在PROTUES仿真平台上运行。
关键词:ATmega16单片机;DS1302芯片;独立键盘;LCD1602Abstract:With the development of science and technology electronic clock in the daily life of the application is quite long. This paper introduces a single chip processor as the main control chip based on ATmega16 digital electronic clock design. Include ATmega16 microcontroller, independent keyboard, DS1302 chip LCD1602, liquid crystal display (LCD), and related peripheral circuit and in PROTUES simulation platform operation.Key words:ATmega16 microcontroller;DS1302 chip;Independent keyboard;LCD1602 1 前言液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧等许多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
本文中详细介绍了基于ATmega16单片机控制下的162液晶屏显示设计,此设计基于ds1302的时钟电路方便实用,电路设计简单。
基于Atmega16和DS1302的数码管时钟设计
time clock
日常生活中,人们几乎离不开时钟,控制系统 数据采集 中 经 常 需 要 进 行 实 时 记 录,也 离 不 开 时 钟。采用实时时钟芯片提供时钟数据是现代电子 设计中比较方便的一种方法,常用的实时时钟芯片 有 DS12B887、DS1302、DS3232 等。本文介绍利用 Atmega16 微 处 理 器[1-2] 和 廉 价 的 实 时 时 钟 芯 片 DS1302[3]制作数码电子钟的一种方法。
ZHANG Ming-chang
( Department of Basic Sciences,Beijing Institute of Graphic
Communication,Beijing 102600,China)
Abstract: Clock is used to enregister the time and the realtime data collection in the life and the system of the automatic control. The DS1302 is an excellent chip of the real - time clock. The main working principle of DS1302 and programming sought are introduced. The interface design of the software and hardware of the AVR microcomputer Atmega16 and DS1302 are also given. Finally, the system hardware and software interactive simulation is completed on the platform of Proteus and the design of LED digital clock is realized. Key words: Atmega16 microcontroller; DS1302; real-
基于AVR单片机Megal6的电子时钟设计
基于AVR单片机Megal6的电子时钟设计1 引言数7 钟能长期、连续、可靠、稳定地工作;同时还具有体积小,功耗低等特点,便于携带,使用方便。
数字钟是采用数字电路实现对“时、分、秒”数字显示的计时装置,广泛应用于个人家庭、车站、码头、办公室等公共场所,已成为人们日常生活中不可缺少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
传统MCS51 系列单片机的所有数据处理都基于一个累加器,因此累加器与程序存储器、数据存储器之间的数据转换就成了单片机的瓶颈;在AVR 单片机中,寄存器由32 个通用工作寄存器组成,并且任何一个寄存器都能充当累加器,从而有效避免累加器的瓶颈效应,提高系统性能。
AVR 系列的单片机不仅具有良好的集成性能,而且都具备在线编程接口,其中的Mega 系列还具备JTAG 仿真和下载功能;含有片内看门狗电路、片内程序Flash、同步串行接口SPI;多数AVR 单片机还内嵌了A/D 转换器、EEP―ROM、模拟比较器、PWM 定时计数器等多种功能;AVR 单片机的I/O 接口具有很强的驱动能力,灌入电流可直接驱动继电器、LED 等元件,从而省去驱动电路,节约系统成本。
2 整体设计思路利用Megal6 单片机内部时钟作为时间基准,通过软件编程控制可编程器件Megal6,实现秒、分、时、日、月、年的控制,最终通过LCD液品显示屏显示结果。
此外还可以实现时间训整、定时等多种实用功能。
整个设计分硬件和软件两大部分。
硬件部分采用Megal6 单片机作为可编程芯片,1602 字符液品作为信号显示;软件部分利用C 语言作为设计语言,对Megal6 进行编程实现各种功能。
3 硬件设计硬件设计电路分解为Megal6 单片机、晶体振荡器和802/1602字符液晶显示3 个部分,其结构简单,经济实惠。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于ATmega16单片机的电子时钟设计物理与电子工程学院电子信息科学与技术专业(职教)2009级罗德龙指导教师宋培森摘要:随着科学技术的发展电子时钟在日常的生活中应用的相当的多。
本文介绍了一款基于ATmega16单片机为主控芯片的数字电子时钟设计。
其中主要包括ATmega16单片机、独立键盘、DS1302芯片、LCD1602液晶显示、以及相关外围电路并在PROTUES仿真平台上运行。
关键词:ATmega16单片机;DS1302芯片;独立键盘;LCD1602Abstract:With the development of science and technology electronic clock in the daily life of the application is quite long. This paper introduces a single chip processor as the main control chip based on ATmega16 digital electronic clock design. Include ATmega16 microcontroller, independent keyboard, DS1302 chip LCD1602, liquid crystal display (LCD), and related peripheral circuit and in PROTUES simulation platform operation.Key words:A Tmega16 microcontroller;DS1302 chip;Independent keyboard;LCD1602 1 前言液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧等许多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
本文中详细介绍了基于ATmega16单片机控制下的162液晶屏显示设计,此设计基于ds1302的时钟电路方便实用,电路设计简单。
2 AVR单片机介绍2.1 AVR单片机简介AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC精简指令集高速8位单片机。
AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪表仪器、通讯设备、家用电器等各个领域。
1997年,由Atmel公司挪威设计中心的A先生和V先生,利用Atmel公司的Flash新技术,共同研发出RISC精简指令集高速8位单片机,简称AVR。
2.2 Atmega16简介ATmega16是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。
由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达 1 MIPS/MHz,从而可以减缓系统在功耗和处理速度之间的矛盾。
ATmega16 AVR 内核具有丰富的指令集和32 个通用工作寄存器。
所有的寄存器都直接与运算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。
这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10 倍的数据吞吐率。
ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力),512 字节EEPROM,1K 字节SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/ 计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益的ADC ,具有片内振荡器的可编程看门狗定时器,一个SPI 串行端口,以及六个可以通过软件进行选择的省电模式。
2.3 ATmega16产品特性高性能、低功耗的8位AVR微处理器先进的RISC 结构131条指令大多数指令执行时间为单个时钟周期32个8位通用工作寄存器全静态工作工作于16MHz时性能高达16MIPS只需两个时钟周期的硬件乘法器非易失性程序和数据存储器16K 字节的系统内可编程Flash,擦写寿命: 10,000次具有独立锁定位的可选Boot代码区,通过片上Boot程序实现系统内编程,真正的同时读写操作512 字节的EEPROM,擦写寿命: 100,000次1K字节的片内SRAM可以对锁定位进行编程以实现用户程序的加密JTAG 接口( 与IEEE 1149.1 标准兼容)符合JTAG 标准的边界扫描功能支持扩展的片内调试功能通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程外设特点两个具有独立预分频器和比较器功能的8位定时器/计数器一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器具有独立振荡器的实时计数器RTC四通道PWM8路10位ADC,8个单端通道,2个具有可编程增益(1x, 10x, 或200x)的差分通道面向字节的两线接口两个可编程的串行USART可工作于主机/ 从机模式的SPI 串行接口具有独立片内振荡器的可编程看门狗定时器片内模拟比较器特殊的处理器特点上电复位以及可编程的掉电检测片内经过标定的RC振荡器片内/片外中断源6种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及扩展的Standby模式 u I/O和封装32个可编程的I/O口2.4 工作电压:ATmega16L:2.7 - 5.5VATmega16: 4.5 - 5.5V2.5 ATmega16 引脚功能VCC 电源正GND 电源地端口A (PA7..PA0)做为A/D 转换器的模拟输入端。
端口A 为8 位双向I/O 口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口A 处于高阻状态。
端口B(PB7..PB0)为8位双向I/O 口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口B 处于高阻状态。
端口B也可以用做其他不同的特殊功能.端口C(PC7..PC0) 为8 位双向I/O 口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口C 处于高阻状态。
如果JTAG接口使能,即使复位出现引脚PC5(TDI)、 PC3(TMS)与 PC2(TCK)的上拉电阻被激活。
端口C 也可以用做其他不同的特殊功能。
端口D(PD7..PD0)为8 位双向I/O 口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口D 处于高阻状态。
端口D 也可以用做其他不同的特殊功能.RESET 复位输入引脚。
持续时间超过最小门限时间的低电平将引起系统复位。
持续时间小于门限间的脉冲不能保证可靠复位。
XTAL1 反向振荡放大器与片内时钟操作电路的输入端。
XTAL2 反向振荡放大器的输出端。
AVCC AVCC是端口A与A/D转换器的电源。
不使用ADC时,该引脚应直接与VCC连接。
使用ADC时应通过一个低通滤波器与VCC 连接。
AREF A/D 的模拟基准输入引脚。
2.6 AVR单片机的应用区域AVR单片机应用区域包括:空调控制板、打印机控制板、智能电表、智能手电筒、LED控制屏和医疗设备等领域。
3162液晶显示屏介绍162液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字等。
3.1 162液晶屏显示屏的引脚定义首先,我们来看162的引脚定义,162的引脚是很整齐的SIP单列直插封装。
表1是液晶屏的引脚定义。
表1 接口信号说明表该液晶屏采用标准的16脚接口,我们只需要关注一下几个管脚:1 脚:VSS 为地电源。
2 脚:VDD 接 5V 正电源。
3脚:VEE,液晶屏显示偏压信号,用于调整液晶屏的显示对比度,一般会外界电位器用以调整偏压信号,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“阴影”,使用时可以通过一个10K的电位器调整对比度。
4脚:RS,数据/命令选择端,即对寄存器进行选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
5脚:R/W,读写选择端,高电平时进行读操作,低电平时进行写操作。
6脚:E,使能信号,其实时162的逐句控制时钟信号,利用该信号的上升沿实现对液晶屏的数据传输。
7~14脚:8位双向数据线。
15脚:背光阳极。
16脚:背光阴极。
3.2 162液晶显示屏的指令说明162液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:1为高电平、0为低电平)。
162液晶屏内部模块共有11条控制指令,如表2所示。
指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S: 屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效指令4:显示开关控制。
D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符指令7:字符发生器RAM地址设置指令8:DDRAM地址设置指令9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据指令11:读数据3.3 162液晶显示屏的时序在操作液晶屏,我们应该对它的工作时序非常熟悉,这里介绍了162液晶显示屏的两个写时序:写指令和写入数据。
写指令,即设置162液晶显示屏的工作方式:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
写数据,即在液晶屏上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到D0~D7,最后E引脚一个高脉冲将数据写入。