四位数码管秒闪烁可调时钟

更新时间:2023-05-20 13:29:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

STC 51单片机的经典程序。

四位数码管可调时钟(1)

/**** 本程序中,晶振为12MHz, ****/

/**** 时间控制采用定时中断控制方式。 ****/

/**** 模式和时间调整采用查询方式。 ****/

#include<reg52.h>

sbit P20=P2^0; //分个位控制端

sbit P21=P2^1; //分十位控制端

sbit P22=P2^2;

sbit P23=P2^3;

sbit key0=P3^0;

sbit key1=P3^1;

sbit key2=P3^2; //时个位控制端 //时十位控制端 sbit led=P2^7; //second display led //模式设置 //加 //减

unsigned char hour,min,sec,T50ms;

unsigned char modstate; //模式状态

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段码

void init(); //初始化子程序声明

void delay500us(unsigned char X); //延时子程序声明

void display(); //显示子程序声明

void display001(); //显示子程序声明

STC 51单片机的经典程序。

void display002();

void keyscan();

void main()

{

init(); while(1) { } keyscan(); //显示子程序声明 //按键识别子程序声明

}

void init()

{

} //初始化子程序 TMOD=0x01; TH0=(65536-49990)/256; TL0=(65536-49990)%256; ET0=1; EA=1; TR0=1;

void delay500us(unsigned char X)

{

unsigned char i,j;

for(i=X;i>0;i--) for(j=248;j>0;j--);

}

void timer0() interrupt 1 //timer0中断服务子程序,定时时间为50ms,本程序加了10us的时间修正量

{

TMOD=0x01; TH0=(65536-49990)/256; TL0=(65536-49990)%256; T50ms++; if(T50ms>=20) { T50ms=0; sec++; if(sec>=60) { sec=0;

STC 51单片机的经典程序。

} } } if(min>=60) { min=0; hour++; } if(hour>=24)hour=0;

void display()

{

P20=1; P21=1; P22=1; P23=1; P0=table[min%10]; P20=0; delay500us(5); P20=1; P21=1; P22=1; P23=1; P0=table[hour%10]; P22=0; delay500us(5); P20=1; P21=1; P22=1; P23=1; P0=table[min/10]; P21=0; delay500us(5); P20=1; P21=1; P22=1; P23=1; P0=table[hour/10]; P23=0; delay500us(5);

STC 51单片机的经典程序。

}

{

P20=1; P21=1; P22=1; P23=1; P0=table[hour/10]; P23=0; delay500us(10); P20=1; P21=1; P22=1; P23=1; P0=table[hour%10]; P22=0; if(T50ms<=10)led=0; if(T50ms>10)led=1; void display001()

delay500us(10);

}

void display002()

{

}

P20=1; P21=1; P22=1; P23=1; P0=table[min/10]; P21=0; delay500us(10); P20=1; P21=1; P22=1; P23=1; P0=table[min%10]; P20=0; delay500us(10);

STC 51单片机的经典程序。

void keyscan()

{

//按键识别钟程序 while(modstate==0) { display(); } if(key0==0) { } display(); if(key0==0)modstate++; //这两句加在一起为延时10ms软件防抖设计。 while(key0==0)display001(); //等待按键释放。

//****************************************************************************// while(modstate==1)

{ } display001(); if(key0==0) { display001(); if(key0==0)modstate++; //这两句加在一起为延时10ms软件防抖设计。 while(key0==0)display002(); //等待按键释放。 } if(key1==0) { display001(); if(key1==0) { } hour++; if(hour>=24)hour=0; while(key1==0)display001(); } if(key2==0) { } display001(); if(key2==0) { } hour--; if(hour>=24)hour=0; while(key2==0)display001();

STC 51单片机的经典程序。

//****************************************************************************//

} while(modstate==2) { display002(); if(key0==0) } { } if(key1==0) { } if(key2==0) { display002(); if(key2==0) } { } min--; if(min>=60)min=0; while(key2==0)display002(); display002(); if(key1==0) { } min++; if(min>=60)min=0; while(key1==0)display002(); display002(); if(key0==0)modstate=0; while(key0==0)display(); //这两句加在一起为延时10ms软件防抖设计。 //等待按键释放。

本文来源:https://www.bwwdw.com/article/76e4.html

Top