用AT89C51单片机写一个C语言程序实现2个led秒计数器,用1个按键控制开始计时、暂停计时、计时时间和清零?
- 用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上。
- 用C语言编写AT89C51单片机程序,设计一个智能数字钟。
- 用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键分别控制暂停、加一秒、减一秒和继续
- AT89C51单片机如何实现一个按钮控制两个LED同步闪烁?
用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上。
按照你的要求写的程序如下,你拿去测试吧!
#include "REG52.H"
sbit SHUG_01 = P2^0; //数码管1
sbit SHUG_02 = P2^1; //数码管2
sbit SHUG_03 = P2^2; //数码管3
sbit SHUG_04 = P2^3; //数码管4
sbit SHUG_05 = P2^4; //数码管5
sbit SHUG_06 = P2^5; //数码管6
sbit KEY0_01 = P0^0; //按键 启动或停止
sbit KEY0_02 = P0^1; //按键 加
sbit KEY0_03 = P0^2; //按键减
#define LED_DATA P1 //P1数据端口
unsigned char value_temp = 0;
unsigned char value_shio = 23;
unsigned char value_feno = 59;
unsigned char value_miao = 59;
unsigned char code value_tab0[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //共阳极
unsigned char code value_tab1[]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //共阳极
/*
* 延时1ms延时子函数
**/
void Delay_1ms(unsigned int Time)
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);
}
/*
* 按键开关【启动和停止】子函数
**/
void Scan_keyoutCmd(void)
{
if(KEY0_01 == 0)
{
Delay_1ms(10);
if(KEY0_01 == 0)
{
TR0 = ~ TR0;
}
while(KEY0_01 == 0);
}
if(KEY0_02 == 0)
{
Delay_1ms(10);
if(KEY0_02 == 0)
{
value_miao--;
if(value_miao == -1)
{
value_feno--;
value_miao = 59;
if(value_feno == 0)
{
value_shio--;
value_feno = 59;
if(value_shio == 0)
{
value_shio = 23;
}
}
}
while(KEY0_02 == 0);
}
}
if(KEY0_03 == 0)
{
Delay_1ms(10);
if(KEY0_03 == 0)
{
value_miao++;
if(value_miao == 60)
{
value_miao = 0;
value_feno++;
if(value_feno == 60)
{
value_feno = 0;
value_shio++;
if(value_shio == 24)
{
value_shio = 0;
}
}
}
while(KEY0_03 == 0); //检测松手
}
}
}
/*
* 程序运行【启动和停止】子函数
**/
void Disp_layledketCmd(void)
{
/***小时***/
SHUG_01 = 1;
LED_DATA = value_tab0[value_shio / 10]; /*******小时的十位数显示***************/
Delay_1ms(5);
SHUG_01 = 0;
SHUG_02 = 1;
LED_DATA = value_tab1[value_shio % 10]; /*******小时的个位数显示***************/
Delay_1ms(5);
SHUG_02 = 0;
/***分钟***/
SHUG_03 = 1;
LED_DATA = value_tab0[value_feno / 10]; /*******分钟的十位数显示***************/
Delay_1ms(5);
SHUG_03 = 0;
SHUG_04 = 1;
LED_DATA = value_tab1[value_feno % 10]; /*******分钟的个位数显示***************/
Delay_1ms(5);
SHUG_04 = 0;
/***秒钟***/
SHUG_05 = 1;
LED_DATA = value_tab0[value_miao / 10]; /*******秒钟的十位数显示***************/
Delay_1ms(5);
SHUG_05 = 0;
SHUG_06 = 1;
LED_DATA = value_tab0[value_miao % 10]; /*******秒钟的个位数显示***************/
Delay_1ms(5);
SHUG_06 = 0;
}
void Tero_Init(void)
{
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
ET0 = 1;
TR0 = 1;
EA = 1;
}
/*
* 函数主体
**/
int main(void)
{
P1 = P2 = P3 = 0x00;
Tero_Init();
while(1)
{
Scan_keyoutCmd();
Disp_layledketCmd(); //执行应运程序
}
}
/*
* 定时器中断服务程序
**/
void Tmero()interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
value_temp++;
if(value_temp == 20)
{
value_temp = 0;
value_miao--;
if(value_miao == 0)
{
value_feno--;
value_miao = 59;
if(value_feno == 0)
{
value_shio--;
value_feno = 59;
if(value_shio == 0)
{
value_shio = 23;
}
}
}
}
}
用C语言编写AT89C51单片机程序,设计一个智能数字钟。
基本要求:1.C语言程序要求是模块化设计。2.该闹钟基于AT89C51单片机及相关外围电路进行设计。3.该闹钟有6个数码管(共阳极),可分别显示时间(时、分、秒)、及定时时间(分、秒)。4.该闹钟有4个按钮,S1是切换显示按键,该键按下时可分别实现切换正常走时显示、设定走时显示、设置定时时间,启动定时,回到正常状态等功能。S2是设定键,即该键按下,将分别选中需要设定的选项。S3键是加键,即按下去表示相应选项加1。S4键是减键,即按下去表示相应的选项减1。5.该闹钟可以定时时间到,LED将发出提示闪光,且持续30s。发挥要求:1.定时时间可被打断,即打断后恢复时继续计时。2.设置闹钟报警功能;3.能切换显示年月日等信息。
用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键分别控制暂停、加一秒、减一秒和继续
#include<reg51.h>
#define uchar unsigned char;
uchar LED1,LED2;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar num=0;sec,key;
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
void display()
{
LED1=sec/10;
LED2=sec%10;
P2=0x01;
P0=distab[LED1];
delay(3);
P2=0x02;
P0=distab[LED2];
delay(3);
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>=20)
{
num=0;
sec++;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
LED1=0;
LED2=0;
while(1)
{
key=P1;
if((key&0x0f)!=0x0f)
{
delay(10);
key=P1&0x0f;
if(key!=0x0f)
{
switch(key)
{
case 0x0e:TR0=0;break;
case 0x0d:sec++;break;
case 0x0b:sec--;break;
case 0x07:TR0=1;break;
default:break;
}
}
}
)
display();
}
}
AT89C51单片机如何实现一个按钮控制两个LED同步闪烁?
。。。。。。。。。。。。简单到离谱了,一楼还有脸说代做。。。
细节你没说明,以下是按下开关不放时,两个灯一起闪,1秒亮1秒暗。开关松开就停止闪烁。
#include
sbit d1=P0^0;
sbit d2=P0^1;
sbit k1=P3^0;
void delay(int x)
{
char y;
while(x--)
for(y=0;y<120;y++);
}
void main()
{
while(1)
if(k1==0)
{
d1=~d1;
d2=~d2;
delay(1000);
}
}
因为我偷懒的关系,程序有个小漏洞,延时函数的x和y应该定义成无符号数更合理