此程序是在51hei单片机开发板上面做的,如需要移植到自己的电路上,修改相应的端口即可
//****80c52***时钟程序
//***手把手教你学单片开发板***
//**2012/9/7***23:02***
# include
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
uint8 block[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};//显示数组
uint8 a[6];
uint16 counter=0;
uint32 sec=0;
#define tr 40 //发声值
bit MS = 1; //状态字;
sbit ADDR0 = P1^0; //A0****
sbit ADDR1 = P1^1; //A1*****
sbit ADDR2 = P1^2; //A2*****
sbit ADDR3 = P1^3; //E1|E2**
sbit ENLED = P1^4; //E3****38译码器
sbit BUZZ = P1^6; //蜂鸣器
sbit keyout1 = P2^3; //按键公共端
sbit keyin1 = P2^4; //k1 长安0.1S进入时间调节;
sbit keyin2 = P2^5; //k2 时间调节断码选择
sbit keyin3 = P2^6; //k3 调节时间加
sbit keyin4 = P2^7; //k4 调节时间减
void refresh_LS(); //数码管扫描函数
void timer1_int(); //定时器1中断函数
void keying(); //按键读取函数
void display(); //数码管显示函数
void buzzer(); //蜂鸣器发声函数
void delay(uint16 n); //延时函数
main()
{
keyout1 = 0;
keyin1 = 1; keyin2 = 1; keyin3 = 1; keyin4 = 1;
ENLED = 0; ADDR3 = 1;
timer1_int();
display();
while(1)
{
if(keyin1 == 0)
{
delay(100000);
if(keyin1 == 0)
{
MS = ~MS;
buzzer();
while(!keyin1);
}
}
if(MS == 0)keying();
}
}
void buzzer()
{
static uint8 i=0;
for(i=0;i
{
BUZZ =~BUZZ;
delay(100);
}
BUZZ = 1;
}
void delay(uint16 n)
{
while(n--);
}
void timer1_int()
{
TMOD |= 0X10;
TMOD &= 0xdf;
TH1 = 0xfc;
TL1 = 0x67;
TR1 = 1;
EA = 1;
ET1 = 1;
}
void interrupt_tiner1() interrupt 3
{
TH1 = 0xfc;
TL1 = 0x67;
counter++;
if(counter == 1000)
display();
refresh_LS();
}
void display()
{
counter = 0;
if(sec>=86400)sec=0;
a[0] = 0x7f&block[sec%10];
a[1] = block[sec/10%6];
a[2] = 0x7f&block[sec/60%10];
a[3] = block[sec/600%6];
a[4] = 0x7f&block[sec/3600%10];
a[5] = block[sec/36000%3];
if(MS ==1)sec++;
}
void keying()
{
static uint8 i=0,y,y1;
if(keyin2 == 0)
{
i+=2;
if(i == 6)i=0;
delay(500);
}
else if(keyin3 == 0)
{
if(i == 0)sec++;
else
if(i == 2)sec+=60;
else
if(i == 4)sec+=3600;
delay(1000);
}
else if(keyin4 == 0)
{
if(i == 0)sec--;
else
if(i == 2)sec-=60;
else
if(i == 4)sec-=3600;
delay(500);
}
display();
if((keyin1 == 0)||(keyin2 == 0)||(keyin3 == 0)||(keyin4 == 0))buzzer();
while((keyin1 == 0)||(keyin2 == 0)||(keyin3 == 0)||(keyin4 == 0));
y = a[i];
y1 = a[i+1];
a[i] = 0xff;
a[i+1]=0xff;
delay(5000);
a[i] = y;
a[i+1]=y1;
delay(5000);
}
void refresh_LS()
{
static uint8 j=0;
switch(j)
{
case 0: ADDR0 = 0; ADDR1 = 0; ADDR2 = 0; P0=a[0]; j++; break;
case 1: ADDR0 = 1; ADDR1 = 0; ADDR2 = 0; P0=a[1]; j++; break;
case 2: ADDR0 = 0; ADDR1 = 1; ADDR2 = 0; P0=a[2]; j++; break;
case 3: ADDR0 = 1; ADDR1 = 1; ADDR2 = 0; P0=a[3]; j++; break;
case 4: ADDR0 = 0; ADDR1 = 0; ADDR2 = 1; P0=a[4]; j++; break;
case 5: ADDR0 = 1; ADDR1 = 0; ADDR2 = 1; P0=a[5]; j=0; break;
default: break;
}
}
关键字:单片机 C语言 时钟源码
引用地址:单片机C语言时钟源码
上一篇:单片机为什么要晶振_51单片机晶振频率
下一篇:51系列汇编语言
推荐阅读最新更新时间:2024-03-16 13:51
51单片机解密红外遥控器
在这里我仅把一些关键的带出来 关于硬件电路 那么抛开那么多文字介绍 最后意思就是说 你家里的遥控板 也就是发射部分 是把所有的封装好了的 比如键盘矩阵、编码调制、LED红外发送器 等等 那么接受部分 SM0038 3个脚 一个脚地 一个脚电源 一个脚信号脚 接到 单片机随便个P口上(此处是P3。6) OK 硬件部分就搞定了当然还有数码管显示 ,这些肯定不用说你都能搞定吧,这些东东都有,所以就不用自己去搭电路那么麻烦了),那么 我们想 我们按一下遥控板 大家看到 有个灯闪了一下 然后OVER 那么 我们现在要做的就是在灯闪了那一下之后让 单片机来读它的键码 然后不同的键码来干不同的事 ,本文 是向大家解释一种方法 当然如果你知道
[单片机]
使用Atmel Studio7和USBasp烧写器烧写AVR单片机
很多教程中都提供使用Atmel Studio和MKII对AVR单片机进行烧写,但民间使用最多的烧写器是物美价廉的USBasp,10元左右的价格比200元的MKII亲民多了。但是在Atmel Studio中不可以直接使用USBasp进行烧写,于是通常需要借助其他软件,带来更多麻烦。 本文通过Atmel Studio的External Tools和Avrdude软件,达到可以在Atmel Studio中直接烧写单片机的目的。这样可以在开发环境中完成编程、编译和烧写,非常方便。 第一步:你需要有一个USBasp以及其驱动,驱动程序在网络上铺天盖地,在购买模块的时候向店家索要也可。在设备管理器中可以通过设定驱动搜索的路径来安装驱动
[单片机]
讲述单片机如何解决高速控制LED显示屏
图1是高速控制方案LED显示屏电路原理。采用MCS51系列单片机对 LED显示屏 进行控制;随机存储器62512用作LED显示屏的数据存储器,存储待显示内容的字模数据;采用8行扫描方式,多片LED点阵片共用1组行驱动电路;每片LED点阵片都有一组列驱动电路,用74LS377作为列驱动的锁存器,CPU通过并行总线给列驱动电路的锁存器写字模数据;地址译码电路,用于产生LED点阵片行驱动电路和列驱动电路的片选地址。 图1 高速控制方案LED显示屏电原理 本方案的特点有两个:第一,虽然CPU还是通过并行总线给列驱动电路的锁存器写字模数据,但是锁存器的锁存信号改用了CPU的控制信号RD,而不是常规用法的WR;第二,地址译码电
[单片机]
恩智浦新品:JN516x无线微控制器和评估套件
恩智浦在本届香港灯饰展上展出了针对物联网的JN516x系列无线微控制器以及可简化ZigBee、JenNet-IP和其他IEEE 802.15.4应用商业开发的全新评估套件。该评估套件提供产品设计所需的所有硬件和软件构件,并包含基于JenNet-IP的智能照明系统等多个演示、使用ZigBee Smart Energy的多个电能计量应用、ZigBee Light Link以及RF4CE控制系统。 JN516x评估套件的演示视频地址为: http://v.youku.com/v_show/id_XNTA1NDgzODQ0.html 演示包括: • 基于JenNet-IP、用路由器来支持WLAN或互联网连接的智能照明演示
[电源管理]
基于C8051F040单片机的温度测控系统
温度遥控遥测是远程实现对温度的测量与控制,特别适合那些环境恶劣,测量人员不容易接近的场合,近年来在工农业生产中应用广泛。根据遥控遥测系统的特点,提出了对水温遥控遥测的设计方案。 1 总体方案设计 温度遥控遥测系统主要由微处理器系统、测温模块、加热模块、通信模块、液位模块以及上位机软件等组成。系统构成如图1所示。 测温模块测量液体温度后,把温度数值发送给微处理器,当温度变化达到一定值后,加热模块开始加热,首先可以在设定的时间内,加热到设定的温度并稳定在该温度一段时间。系统还可以按照设计好的各温度节点进行分段折线加热,精度很高。测液位模块实时测量液体液位,并传给微处理器。系统通过两个通信模块实现遥
[单片机]
基于PIC32单片机LED点阵显示控制系统设计
简介: LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。 导读:LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。 项目背景: LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。目前,已经被广泛应用到军事、车站
[单片机]
MCS-51系列单片机位置位复位指令(4条)
布尔处理功能是MCS-51系列单片机的一个重要特征,这是出于实际应用需要而设置的。布尔变量也即开关变量,它是以位(bit)为单位进行操作的。 在物理结构上,MCS-51单片机有一个布尔处理机,它以进位标志做为累加位,以内部RAM可寻址的128个为存储位。 既然有布尔处理机功能,所以也就有相应的布尔操作 指令 集,下面我们分别谈论。 . 位置位复位指令(4条) 这些指令对CY及可寻址位进行置位或复位操作,共有四条指令。 CLR C ; 0→CY,清CY CLR bit ; 0→bit,清某一位 SETB C ; 1→CY,置位CY SETB bit ; 1→bit,置位某一位
[单片机]
单片机在电源设计中的应用
电源设计人员经常面临种种互相对立的要求。一方面要缩小体积、降低成本,另一方面又要提供更多功能并提高输出功率。受原理上的限制,模拟电源本身的功能有限,而模拟电源控制器的设计更是越来越复杂。由于这一原因,有些设计人员转向了纯数字电源设计。然而,对于许多设计人员来说,如此快速地转向不熟悉的领域并不容易。比较可行的一种折衷方法是采用传统模拟电源,但增加数字单片机做为前端。 这种设计的优点在于电源本身的控制仍然使用模拟技术来实现。因此电源设计人员不需要从头重新开始全数字设计就可以为现有设计增加新的功能。采用这种方法,设计中仍然使用熟悉的误差放大器、电流检测以及电压检测电路。当然,尽管有些设计单元(如补偿网络)仍然采用分立器件实现,但其余部
[电源管理]
- 热门资源推荐
- 热门放大器推荐
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多热门文章
更多每日新闻
更多往期活动
11月23日历史上的今天
厂商技术中心
随便看看