用51单片机设计小时候带的简易电子表

发布者:码农侠最新更新时间:2020-03-04 来源: 51hei关键字:51单片机  简易电子表  时钟和秒表 手机看文章 扫描二维码
随时随地手机看文章

学了51,模仿了小时候电子手表的基本功能,可以在时钟和秒表两个功能间切换,用的是郭天祥的板子。采用四个独立按键,通过对四个键按下的次数不同,实现不同的功能,程序详注。(第一次尝试很多地方未免复杂冗余,希望大神指点)


/*使用1602作为电子表的显示屏,单片机上电后,首先通过按键设定当前时间,完成初始化,同时该电子表还具有秒表功能,按下秒表键后,进入秒表界面。秒表界面有开始,取次,停止,复位,返回时间,可以记录三次取时,每个按钮按下都对应蜂鸣器短响一声进入秒表界面,时间继续运行,在时间界面,秒表处于复位状态。*/


单片机源程序如下:

/*......................................................................................*/

#include

sbit lcden=P3^4;              //使能端                                                   

sbit lcdrs=P3^5;              //RS                                                             

sbit dula=P2^6;               //定义锁存器的锁存端         

sbit wela=P2^7;

sbit s1=P3^0;                 //定义按键----功能键

sbit s2=P3^1;                                  //定义按键-----增加键

sbit s3=P3^2;                                  //定义按键------计次键

sbit s4=P3^3;                                  //定义按键------钟与秒表的切换键

sbit rd=P3^7;                                  //初始化函数中使它接地从而使第四列矩阵键盘成为独立键盘                                                      

sbit beep=P2^3;                                  //定义蜂鸣器

char count,count1,s1num,s2num,s3num,s4num,stop, miao,shi,                               //stop保证在秒表工作模式下,定时器0的数值不会被送去lcd显示。      count,count1是用到定时器里面,   *num是用来计按键次数,miao*,shi*,fen*

fen,miao1,shi1,fen1,miao3,fen3,shi3,miao4,fen4,shi4,miao5,                                   //是用来保持lcd上的显示的,结合下面应该可以看懂。

fen5,shi5,miao6,fen6,shi6,miao7,fen7,shi7,miao8,fen8,shi8,

miao9,fen9,shi9;                           //char表示的数据范围-127~128     

void delay(int z)             //延时子函数

{

        int x,y;

        for(x=z;x>0;x--)

                for(y=110;y>0;y--);

}

void xiang()                  //蜂鸣器发声函数

{

        beep=0;

        delay(20);

        beep=1;

}

void write_com(char com)      //写命令子函数

{

        lcdrs=0;

        P0=com;

        delay(5);

        lcden=1;

        delay(5);

        lcden=0;

}


void write_date(char date)    //写数据子函数

{

        lcdrs=1;

        P0=date;

        delay(5);

        lcden=1;

        delay(5);

        lcden=0;

}

void write_sfm(unsigned char add,unsigned char date)  //写时分秒函数

{

        unsigned char shi,ge;

        shi=date/10;              //分解一个2位数的十位和个位

        ge=date%10;

        write_com(0x80+0x40+add); //设置显示位置

        write_date(0x30+shi);     //送去液晶显示十位

        write_date(0x30+ge);      //送去液晶显示个位

}

void init()                   //初始化函数

{

        rd=0;                     //软件将矩阵按键第四列一端置低用来分离出独立按键

        dula=0;

        wela=0;                          //关闭锁存器,防止数码管分流,影响1602的显示

        lcden=0;

        fen=0;                    //初始化钟变量值

        miao=0;

        shi=0;

        count=0;

        count1=0;

        s1num=0;

        s2num=0;

        s3num=0;

        s4num=0;

        write_com(0x38);                 //设置16*2显示,5*7点阵,8位数据口

        write_com(0x0c);                 //开显示,不开光标  00001100

        write_com(0x06);                 //写字符后地址指针自动加一,不移动 00000110

        write_com(0x01);                 //清除屏幕上原有的乱码

        write_com(0x80+0x04);         //从第一行的第五个字符位开始显示

        write_com(0x80+0x40+6);  //在第二行第第七个字符处写入 “ :”

        write_date(':');

        delay(5);

        write_com(0x80+0x40+9);  //在第二行第第十个字符处写入 “ :”

        write_date(':');

        delay(5);

        write_sfm(10,miao);

        write_sfm(7,fen);

        write_sfm(4,shi);

        TMOD=0X11;                //设置定时器0的工作模式1;

        TH0=(65536-50000)/256;    //装初值

        TL0=(65536-50000)%256;

        EA=1;                     //打开总中断

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

        TR0=1;                    //启动定时器0

}

void init_stopwatch()                  //初始化秒表

{

        write_com(0x01);

        miao1=0;

        fen1=0;

        shi1=0;

        write_com(0x80+0x40+6);  //在第二行第第七个字符处写入 “ :”

        write_date(':');

        delay(5);

        write_com(0x80+0x40+9);  //在第二行第第十个字符处写入 “ :”

        write_date(':');

        delay(5);

        write_sfm(10,miao1);

        write_sfm(7,fen1);

        write_sfm(4,shi1);                           //TMOD=0x10;错误处:采用两个定时器时,一次设置工作模式就行                                                  

        TH1=(65536-50000)/256;

        TL1=(65536-50000)%256;

        EA=1;

        ET1=1;

        TR1=0;

}

void keyscan()                //键盘扫描函数

{         

        if(s1==0)                                  //判断s1是否被按下

        {

                delay(5);

                if(s1==0)                          //确实被按下

                {


                        while(!s1);                  //按键抬起,

                        xiang();                  //蜂鸣器响

                        s1num++;                  //功能键被按下次数

                        if(s1num==1)          //第一次被按下时

                        {


                        }

                        if(s1num==2)          //第二次被按下时

                        {

                                TR0=0;                                           //关闭定时器

                                write_com(0x80+0x40+10);   //指针定到秒的地址  

[1] [2] [3] [4] [5]
关键字:51单片机  简易电子表  时钟和秒表 引用地址:用51单片机设计小时候带的简易电子表

上一篇:简易STC15F104E单片机定时报警器制作
下一篇:51单片机一氧化碳CO浓度报警器设计

推荐阅读最新更新时间:2024-11-10 17:00

51单片机中常见的四大存储器概念
PROM,称之为可编程存储器。这就象我们的练习本,买来的时候是空白的,能写东西上去,可一旦写上去,就擦不掉了,所以它只能用写一次,要是写错了,就报销了。 EPROM,称之为紫外线擦除的可编程只读存储器。它里面的内容写上去之后,如果觉得不满意,能用一种特殊的办法去掉后重写,这就是用紫外线照射,紫外线就象 消字灵 ,能把字去掉,然后再重写。当然消的次数多了,也就不灵光了,所以这种芯片能擦除的次数也是有限的 几百次吧。 EEPROM,也叫 E2PROM称之为电可擦可编程只读存储器,它和EEPROM类似,写上去的东西也能擦掉重写,但它要方便一些,不需要光照了,只要用电就能擦除或者重新改写数据,所以就方便许多,而且寿命也很长(几万到几十万次
[单片机]
初学51单片机——简单的流水灯程序
#include reg52.h #include intrins.h //调用库函数 #define uint unsigned int #define uchar unsigned char void delay(uint);//延时函数 uchar a,b; void main() { a=0xfe; while(1) { P1=a; delay(500); a=_crol_(a,1);//利用库函数实现流水灯的左移 } } void delay(uint z) { uint i,j; for(i=z;i 0;i--) for(j=110;j 0;j--); }
[单片机]
基于MCS-51单片机的LED点阵屏实现礼花功能
大家可曾记得礼花绽放那一刻的精彩?小时候每当看礼花绽放时,总希望自己能将那最美的那一霎那永远留下。终于,今天我的梦想实现了。通过自己的板板,只要随手编程几下就搞定啦! 在给大家展示效果图之前,我们首先得对 LED 点阵屏做一番介绍!8*8 LED点阵等效 电路 如图1所示。通过分析,我们不难得知:只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如:若想使左上角LED点亮,则Y0=1,X0=0,则会形成压降点亮左上角的LED。这里的水平方向由P2控制,垂直方向由P0控制。   图1 8*8 LED点阵等效电路 本次在LED点阵屏上实现显示礼花的功能原理接口图如图2所示,效果图如图3所示。通过该LED点阵还可以显示静态或
[单片机]
基于MCS-<font color='red'>51单片机</font>的LED点阵屏实现礼花功能
利用51单片机统计脉冲个数,即时输出显示
;利用51单片机设计一个计数显示系统,要求8个数码管显示T1输入脉冲的个数。 ;最好用汇编语言,加注释,尽量别太复杂。尽量快些哈! ;悬赏分:30 | 解决时间:2011-7-20 19:15 | ;===================================================== ;最佳答案: ;题目要求在T1端输入脉冲,统计脉冲个数,并即时输出显示,使用8个LED数码管,显示:0000 0000~9999 9999。 ;计数、显示,很简单的。虽然要求的位数较多,但是循环一下,也就可以了。 ;程序用汇编汇编语言编写好了,指令不超过50行,太简单了。 ;题目只是要求在T1端输入脉冲,并没有指出显示电路,那么
[单片机]
利用<font color='red'>51单片机</font>统计脉冲个数,即时输出显示
51单片机超声波测距程序代码分享
/超声波模块ME007显示程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long //*********************************************** sfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频 //为STC单片机的IO口设置地址定义 sfr
[单片机]
光照强度预警器(AD转换)
本程序与MQ-3酒精浓度报警器一样,都是将对应的模拟信号转换为数字信号,然后通过单片机监控预警,程序也基本相同,接线方法也一样,AD转换器型号为AD0804。相关工程文件、开发板电路图以及模块资料在最下方附件下载。 关于粘贴复制乱码的问题:如果程序复制到Keil编译器上出现注释乱码,可以先建一个.c文件,也就是说不在keil里面编辑,然后用记事本打开.c文件,将源码复制进去,再在keil中添加文件即可。 /*************************************说明*********************************** 此程序只采集模块信号的大小 需要转换为对应的值 还需要转换公式
[单片机]
51单片机串口程序,字符串/16进制发送与接收
这篇文章将说明51串口通信的发送与接收。分为:单个字符接收,字符串接收;十进制发送与接收,十六进制发送与接收。 字符串发送与十六进制发送,参考:http://blog.csdn.net/yibu_refresh/article/details/22695063 程序皆由PC串口工具发送,由单片机接收,并返回接收值给PC机。 一:单个字符的发送与接收 #include reg52.h #define uint unsigned int #define uchar unsigned char //定义接收 字符 uchar Buffer; //串口初始化函数 void URATinit( ) { TMOD=0x20; S
[单片机]
<font color='red'>51单片机</font>串口程序,字符串/16进制发送与接收
如何将ADC连接到8051单片机
ADC(模数转换器)是许多单片机开发中非常重要的一部分,本文是关于将ADC连接到8051单片机。ADC0804是此处使用的ADC,在进行接口程序之前,我们必须清楚地了解ADC0804的工作原理。 一、ADC0804 ADC0804是一颗8位、单通道的A/D转换器。ADC0804的特点是差分模拟电压输入,0-5V输入电压范围,无调零,内置时钟发生器,可以外部调节参考电压以将较小的模拟电压跨度转换为8位分辨率等。ADC0804引脚图如下图所示: ADC0804的Vref/2(引脚9)处的电压可以在外部进行调节,以将较小的输入电压跨度转换为全8位分辨率。Vref/2(pin9)左开表示输入电压跨度为0-5V,步长为5/255=1
[单片机]
如何将ADC连接到80<font color='red'>51单片机</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved