基于stc89c52rc单片机的数字钟设计(数码管显示)

发布者:MysticalSoul最新更新时间:2012-08-15 来源: 51hei关键字:stc89c52rc  数字钟设计  数码管显示 手机看文章 扫描二维码
随时随地手机看文章

事情总是看着简单,做起来没那么容易。
这个程序我开始时是根据教程编的,有些地方不理解就匆匆略过……事实证明这是不可取的……
写了百十来行以后编译,报错!就不会解决了。
这时才体会到基础是多么重要!!!
学习方法要科学,要知其然,更要知其所以然。
就像罗哥说的,从原理入手……
感谢 刘鹏  百忙之中抽出时间指导,真是我的良师和益友。。。。。。。
  *****************************************************
把程序贴出来。大家学习学习。千万不要ctrl c,ctrl v。
全部代码下载地址:http://www.51hei.com/f/ssz.rar
********************************************

我已经加了部分注释……

*************************************************************
P1口接4*4矩阵键盘
P2口作为数码管的片选控制端
P0口送给数码管数据
1:实现时分秒的显示
2:通过S1调节秒,S2调节分钟,S3调节小时,S4退出调节模式。
3:按键松手有效

*************************************************************
矩阵键盘的扫描
定时器的应用
*****************************************
c语言函数调用
形参
实参
******************************************************************

#include
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};//共阴数码管字模
uchar code table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
//P2口位选8个数码管
uchar key_code[] =
{0xb7,0xbb,0xbd,0xbe};
uchar key;
uchar hour,min,sec;
uchar k;
void delay(uchar z)  //延时函数
{
 uchar x,y;
 for(x=z;x>0;x--)
   for(y=100;y>0;y--);
}

void display() //显示函数
{
   if(k==20)//定时器定时50ms,20次就是1秒
   {
     k=0;
  sec++;
 }
   if(sec>59)
  {
    sec=0;
    min++;
   }
 if(min>59)
    {
       min=0;
    hour++;
  }
 if(hour>23)
 {
    hour=0;
  }
     P2=table2[5];  //片选
  P0=table1[hour/10];//送数据,十位
  delay(10);
  P2=table2[4];  //片选
  P0=table1[hour%10];//个位
  delay(10);

  P2=table2[3]; 
  P0=table1[min/10];
  delay(10);
  P2=table2[2]; 
  P0=table1[min%10];
  delay(10);


  P2=table2[1]; 
  P0=table1[sec/10];
  delay(10);
  P2=table2[0]; 
  P0=table1[sec%10];
  delay(10);

  
}

unsigned char keyscan()//键盘扫描程序
{
  unsigned char scan1, scan2, keycode, j;

  P1 = 0xf0;
  scan1 = P1;
  if (scan1 != 0xf0)
  //判键是否按下
  {
    delay(10); //延时10ms
    scan1 = P1;
    if (scan1 != 0xf0)
    //二次判键是否按下
    {
   TR0=0;
      P1 = 0x0f;
      scan2 = P1;
      keycode = scan1 | scan2; //组合成键扫描编码

      for (j = 0; j < 4; j++)
      {
        if (keycode == key_code[j])
        //查表得键值
        {
          key = j;
    while(P1!= 0x0f)
    display();
          return (key); //返回有效键值   
        }
      }
    }
 
  }
  else
    P1 = 0xff;

 
  return (key = 4); //返回无效码
}
void system_Ini() //定时器初始化
{
    TMOD= 0x01;
    TH0=(65535-50000)/256; 
    TL0=(65535-50000)%256; 
 ET0 = 1; 
    TR0  = 1;
  EA=1;

}
void timer0 () interrupt 1 //中断程序
{
   TH0=(65535-50000)/256; 
   TL0=(65535-50000)%256;
   k++;
}
void contral(uchar key) //调整时间
{
   if(key==0||key==1||key==2)
   {
     
   if(key==0)
    {
       sec++;
    if(sec>59)
    {
   sec=0;
    }
    }
    else if(key==1)
    {
    min++;
    if(min>59)
    {
       min=0;
    }
    }
       else if(key==2)
    {
     hour++;
     if(hour>23)
     {
        hour=0;
     }
    }

    
   }
   else if(key==3)
   {
   TR0=1;
   }
}

 


 void main()
 {
  uchar a;
 
 system_Ini();//函数调用,初始化
 while(1)
 {
 a=keyscan();
 contral(a);
 display();
 }


 }
关键字:stc89c52rc  数字钟设计  数码管显示 引用地址:基于stc89c52rc单片机的数字钟设计(数码管显示)

上一篇:感觉比较好的矩阵键盘扫描程序
下一篇:一个简单的51单片机操作系统的实现

推荐阅读最新更新时间:2024-03-16 13:05

数码管计数显示
org 00h a_bit equ 30h ;个位数存放处 b_bit equ 31h ;十位数存放处 c_bit equ 32h ;百位数存放处 d_bit equ 33h ;千位数存放处 e_bit equ 34h ;万位数存放处 f_bit equ 35h ;十万位数存放处 org 0000h ajmp star org 0030h star: mov a,#00h ;;清0 mov a_bit,a mov b_bit,a mov c_bit,a mov d_bit,a mov e_bit,a mov f_bit,a stlop: acall display ;显示
[单片机]
DS18B20温度测试程序(51单片机数码管显示)+电路图
下面是电路图 采用4位数码管显示 程序一共有2个文件 : /*********************************************** ds18b20.h 头文件 *************************************************/ #ifndef _DS18B20_H_ #define _DS18B20_H_ #include reg51.h #define led P1 #define ledw P2 extern unsigned char f; extern void ds18b20_reset(); extern void dela(unsigned char
[单片机]
DS18B20温度测试程序(51单片机<font color='red'>数码管</font><font color='red'>显示</font>)+电路图
两位数码管动态显示C语言程序+电路图
用c语言编写的 51单片机数码管驱动程序 下面是电路图: #include reg52.h #define uint unsigned int void delay7ms(void) //误差 -0.217013888891us { unsigned char a,b; for(b=208;b 0;b--) for(a=14;a 0;a--); } void delay2ms(void) //误差 -0.217013888889us { unsigned char a,b; for(b=80;b 0;b--) for(a=10;a 0;a--); } void main(void
[单片机]
两位<font color='red'>数码管</font>动态<font color='red'>显示</font>C语言程序+电路图
单片机C语言程序设计:定时器控制数码管动态显示
/* 名称:定时器控制数码管动态 显示 说明:8 个数码管上分两组动 态显示年月日与时分秒,本例的 位显示延时用定时器实现。 */ #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int //段码,最后一位是“-”的段码 uchar code DSY_CODE ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //待显示的数据:09-12-25 与 23-59-58(分两组显示) uchar code Tabl
[单片机]
单只数码管循环显示0~F
51单片机源代码如下 /* 单只数码管循环显示0~F */ #include reg51.h typedef unsigned char uint8; typedef unsigned int uint16; code uint8 LED_CODE = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E}; void delay(uint16 x) { uint16 i,j; for(i = x; i 0; i --) for(j = 114; j 0; j --); } void main() {
[单片机]
单只<font color='red'>数码管</font>循环<font color='red'>显示</font>0~F
单片机控制数码管显示
利用单片机控制6个共阴极8段数码管显示,可以通过两个锁存器分别进行位选(位置即哪个数码管)和段选(数码管的哪一段即显示什么数)。74HC573锁存器使能端为低电平有效,当LE为高电平时,输出端(output)跟随输入端(D)变化;当LE为低电平时,输出端保持LE为高电平时的值。单片机通过锁存器控制数码管的电路图如图1所示: 说明: 1)、数码管为共阴极的,当位选Q0~Q5,响应位为0时为选中,为1为不选。如选择第一个数码管P0=0xfe; 2)、共阴极数码管表(段选表) 0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0 1 2 3 4 5
[单片机]
单片机控制<font color='red'>数码管</font><font color='red'>显示</font>
筋膜枪语音芯片,可驱动4位数码管显示的语音IC,WT2003H
筋膜枪功能多样,而它的使用就是希望用户能完全放松,并且拥有语音操作导航提示,让用户在操作上更加简单,再加入数码管显示功能,不仅能让产品与用户语音交互,还能更直观的在视觉上了解当前的工作状态; 深圳唯创知音研发了一款,单芯片可以驱动4位数码管显示+350秒语音播放的扩展芯片:WT2003H-16S,可省去一颗LED/数码管驱动芯片; WT2003H具有低成本、低功耗、高可靠性、通用性强等特点,控制方式灵活:支持标准的异步串口通讯(UART)驱动标准的 4 位数码管并输出 32 个按键。单芯片可内置 100 秒/350 秒语音容量。带有文件索引播放、插播、单曲循环、所有曲目循环、随机播放等功能,32 级音量可调。 语音内容
[嵌入式]
STC89C52RC特点及引脚介绍
STC89C52RC是由宏晶公司推出的一种小型单片机,是 电子工程师 常用器件。其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,且采用高密度非易失存储器制造技术制造,将多功能8位CPU和闪烁存储器组合在单个芯片中,可以很快被中国广大用户接受。其程序的电可擦写特性,使得开发与试验比较容易,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 STC89C52RC的特点 STC89C52RC有很宽的工作电源电压,可为2.7~6V,当工作在3V时,电流相当于6V工作时的1/4。STC89C52RC工作于12Hz时,动态电流为5.5mA,空闲态为1mA,掉电状态仅为20nA。这样小的功耗很适
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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