博客导读网

一个让你随便看看的地方

51单片机制作电子时钟

推荐
记录人生轨迹,寻找人生航向!

很多人估计是把这个当着毕业设计来做或者是课程设计,但是为何年年都是这个题目,年年都有这么多人来问这样的问题呢。我想不是同学们的错,学校的教育制度有很大一部分责任。到底是孰对孰错这里我不想去追问,做好自己本分的事情,没事的时候写一写Blog,希望你们做这个电子时钟真的能学到一点东西,这里上传两个比较经典的例子。

PS:这两个例子绝对是通过调试的,不存在问题的不管是硬件电路还是程序部分。当然我希望你们可以尝试着改改,这样才能体会的更深刻些!

手头没有相机不然拍几张实物照片,显得有点无图无真相的感觉!

51单片机制作电子时钟,这里提供两个例子(一个LED的一个LCD的涵盖了两个电子钟的方向):

声明一下,数码管的是电脑圈圈的作品比较典型,所以这里引用了一下

电脑圈圈版本(LED电子时钟):

硬件电路

51单片机制作电子时钟 - 边城浪子 - 记录人生轨迹,寻找人生航向!
程序:

51单片机制作电子时钟 - 边城浪子 - 记录人生轨迹,寻找人生航向!

程序部分我上传到我的网盘里面了这里就不PS出来了,文章字数有限制.

#include "main.h"
#include "LED.H"
#include "keyboard.h"
#include "timer.h"

void system_initial(void)   //系统初始化
{
TMOD=0x11;                 //定时器工作在模式1
ET0=1;                     //开定时器0中断
TR0=1;                     //启动定时器0
EA=1;                      //开总中断
year=05;
month=06;
day=01;                    //日期初始化为2005年6月1日
}

void main(void)            //主函数
{
system_initial();         //系统开机初始化
while(1)
{
   scan_keyboard();        //键盘扫描
   timer();                //时钟功能
}
}

这里在说一下圈圈是个电脑天才,程序风格很值得大家去学习,看看人家的程序Main中直接调用LED、KeyBoard、Timer(仔细体会一下吧)

个人版本(LCD电子时钟):

硬件电路图

51单片机制作电子时钟 - 边城浪子 - 记录人生轨迹,寻找人生航向!

这个带DS18B20的温度显示。

主程序

#include <REG51.H>
#include <intrins.h>
//#include "LCD1602.h"
//#include "DS1302.h"
#define uint unsigned int
#define uchar unsigned char
sbit DS1302_CLK = P1^7;              //实时时钟时钟线引脚
sbit DS1302_IO = P1^6;              //实时时钟数据线引脚
sbit DS1302_RST = P1^5;              //实时时钟复位线引脚
sbit wireless_1 = P3^0;
sbit wireless_2 = P3^1;
sbit wireless_3 = P3^2;
sbit wireless_4 = P3^3;
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数
sbit Set = P2^0;       //模式切换键
sbit Up = P2^1;        //加法按钮
sbit Down = P2^2;      //减法按钮
sbit out = P2^3;       //立刻跳出调整模式按钮
sbit DQ = P1^0;        //温度传送数据IO口
char done,count,temp,flag,up_flag,down_flag;
uchar temp_value;      //温度值
uchar TempBuffer[5],week_value[2];


void show_time();   //液晶显示程序
/***********1602液晶显示部分子程序****************/


//Port Definitions**********************************************************
sbit LcdRs   = P2^5;
sbit LcdRw   = P2^6;
sbit LcdEn = P2^7;
sfr DBPort = 0x80;   //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口

//内部等待函数**************************************************************************
unsigned char LCD_Wait(void)
{
LcdRs=0;
LcdRw=1; _nop_();
LcdEn=1; _nop_();
      
LcdEn=0;
return DBPort;  
}
//向LCD写入命令或数据************************************************************
#define LCD_COMMAND    0      // Command
#define LCD_DATA    1      // Data
#define LCD_CLEAR_SCREEN 0x01      // 清屏
#define LCD_HOMING    0x02      // 光标返回原点
void LCD_Write(bit style, unsigned char input)
{
LcdEn=0;
LcdRs=style;
LcdRw=0;   _nop_();
DBPort=input; _nop_();//注意顺序
LcdEn=1;   _nop_();//注意顺序
LcdEn=0;   _nop_();
LCD_Wait();
}

//设置显示模式************************************************************
#define LCD_SHOW    0x04    //显示开
#define LCD_HIDE    0x00    //显示关  

#define LCD_CURSOR    0x02 //显示光标
#define LCD_NO_CURSOR   0x00    //无光标      

#define LCD_FLASH    0x01    //光标闪动
#define LCD_NO_FLASH   0x00    //光标不闪动

void LCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}

//设置输入模式************************************************************
#define LCD_AC_UP    0x02
#define LCD_AC_DOWN    0x00      // default

#define LCD_MOVE    0x01      // 画面可平移
#define LCD_NO_MOVE    0x00      //default

void LCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND, 0x04|InputMode);
}

main()
{
    flag=1;           //时钟停止标志
LCD_Initial();    //液晶初始化
Init_DS18B20( ) ;      //DS18B20初始化
Initial_DS1302(); //时钟芯片初始化
up_flag=0;
down_flag=0;
done=0;           //进入默认液晶显示
wireless_1=0;
wireless_2=0;
wireless_3=0;
wireless_4=0;
while(1)
{  
        while(done==1)
          keydone();    //进入调整模式
   while(done==0)
      {
            show_time();                //液晶显示数据
            flag=0;                 
      Setkey();     //扫描各功能键
    }
}
}

添加LCD1602和DS1302的头文件即可,程序也上传至我的网盘了!

原文地址:http://chenling1018.blog.163.com/blog/static/148025420107158557468

记录人生轨迹,寻找人生航向!的其他文章
Ubuntu启动时显示 No resume image,无法进入图形界面 PHP动态编译出现Cannot find autoconf
phpize简介(实例应用) SugarSync替代Dropbox
find 命令介绍 HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth 之完全详解(转载)
仿QQ空间相册上下页效果参考JS CSS3属性box-shadow(阴影效果)使用教程
Ubuntu 下误改sudoers而无法使用sudo解决(忘记root密码时也可以这样找回) Ubuntu修改/etc/sudoers 失败的解决方法
更多...

© 2010 博客导读网 BlogABC.NET 本站所有内容皆由网友推荐而来,所有博文的版权归原作者所有,如有冒犯,请邮件告知。uncracker#gmail.com