1. STC51单片机多功能数字时钟设计
有LCD1602版本的,可以自行修改,
懂事电子设计 Vgz
2. 单片机怎样通过按键在程序实现多功能
如果你就是只有一个按键,可以这样做:设置一个寄存器Key_Times_Buf,然后记录第几次按键,通过这个值,处理相应的程序.
if(Key_Pin==0)
{
Key_Times_Buf++;
if(Key_Times_Buf>=3)
{
Key_Times_Buf=0;
}
}
switch(Key_Times_Buf)
{
case 0:
//程序0
break;
case 1:
//程序1
break;
case 2:
//程序2
break;
}
3. 基于单片机的多功能计算器
不会吧,这么有趣,我前几天做的课程设计就是这个啊!
刚刚花了一个星期做完了这个计算器,硬件,程序,论文都已经完成了。
我里面没用到74LS244或74LS240、与非门等器件,就是用到了51单片机和数码管来实现的
因为51里面的IO口多,没必要用这些东西,如果要用也可以,哈哈。
如果你急要,我发你吧!
4. 谁能给推荐个 多功能(51单片机+xilinx fpga) 开发板
我有一个周立功的ACTEL的开发板。如果你要的话,送你一个51板,还可以教你。
5. C51单片机 一键多功能
计数喽,当没按键时,计数为0,当按下按键时,计数自加即为1,然后进行判断当满足等于1时即P1.1闪烁并确保其他灯灭,当再次按下时,计数再自加即为2,然后进行判断当满足等于2时即P1.2闪烁并确保其他灯灭,以此类推。当到了P1.3时,即再次循环即可。
6. 单片机多功能I/O如何确定使用哪个功能
看资料,看你如何用输入输出口。
7. 51单片机 C语言按键多功能程序怎么写
长按或短按你可以用定时器来设定时间。时间一到就直接跳出来执行就可以了。想连续按1或2或3次的话你就直接用个变量来当计数器,按一下计数一次就可以了。
8. 基于单片机的多功能时间控制器的汇编语言
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit la=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num,num1;tt;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
num=0;
tt=0;
TMOD=0x11;//设置定时器0为工作方式1
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
// EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR0=1;//启动定时器0
TR1=1;
wela=1;//11101010
P0=0xea;
wela=0;
la=1;
P0=0x3f;
la=0;
while(1)
{
if(num1==25)
{
num1=0;
P1=~P1;
}
if(tt==100)
{
tt=0;
num++;
if(num==16)
num=0;
la=1;
P0=table[num];
la=0;
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
}
void time1() interrupt 3
{
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
num1++;
}
这个是中断的一个简单的例子!工作方式和计算初值你应该会吧!在keil中可以把C语言转换成汇编语言!
9. 单片机多功能电子时钟
/*
1、按键可以调整当时时间
2、按键可以调节定时时间
3、定时时间到继电器吸合
*8位数码管显示 时间格式格式 12-08-00 标示12点08分00秒
S1 用于小时 加1操作
S2 用于分钟 加1操作
S2 用于分钟减1操作
*/
#include <reg52.h>
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^4;
sbit LED=P1^2;
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9
unsigned char StrTab[8]; //定义缓冲区
unsigned char minute=30,hour=12,second; //定义并且初始化值 12:30:00
void delay(unsigned int cnt)//延时函数
{
while(--cnt);
}
void Displaypro(void)
{
StrTab[0]=tab[hour/10]; //显示正常时间
StrTab[1]=tab[hour%10];
StrTab[2]=0x40;
StrTab[3]=tab[minute/10];
StrTab[4]=tab[minute%10];
StrTab[5]=0x40;
StrTab[6]=tab[second/10];
StrTab[7]=tab[second%10];
}
main()//主函数
{
TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=1;
TMOD |=0x10; //定时器1用于动态扫描
TH1=0xF8;
TL1=0xf0;
ET1=1;
TR1=1;
EA =1;
Displaypro();
while(1)//主循环
{
/////////////////////////////////////////////////////////////////
if(!KEY1) //按键1去抖以及动作
{
delay(10000);
if(!KEY1)
{
hour++;if(hour==24)hour=0; //正常时间 小时 加1
Displaypro();
}
}
////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
if(!KEY2) //按键去抖以及动作
{
delay(10000);
if(!KEY2)
{
minute++;if(minute==59)minute=0;//分加1
Displaypro();
}
}
/////////////////////////////////////////////////////////////////
if(!KEY3) //按键去抖以及动作
{
delay(10000);
if(!KEY3)
{
minute--;if(minute==0)minute=59; //分减1
Displaypro();
}
}
}
}
////////////////////////////////////////////////////////////////
/********************************/
/* 定时中断1 */
/********************************/
void time1_isr(void) interrupt 3 using 0//定时器1用来动态扫描
{
static unsigned char num;
TH1=0xF8;//重入初值
TL1=0xf0;
switch (num){
case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描
case 1:P2=1;P0=StrTab[num];break;
case 2:P2=2;P0=StrTab[num];break;
case 3:P2=3;P0=StrTab[num];break;
case 4:P2=4;P0=StrTab[num];break;
case 5:P2=5;P0=StrTab[num];break;
case 6:P2=6;P0=StrTab[num];break;
case 7:P2=7;P0=StrTab[num];break;
default:break;
}
num++; //扫描8次,使用8个数码管
if(num==8)
num=0;
}
//////////////////////////////////////////////////////////////////
/********************************/
/* 定时中断0 */
/********************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count;//定义内部静态变量
TH0=0xd8;//重新赋值
TL0=0xf0;
count++;
switch (count)
{
case 0:
case 20:
case 40:
case 60:
case 80:Displaypro(); //隔一定时间调用显示处理
break;
case 50:LED=!LED; //半秒 LED闪烁
break;
default:break;
}
if (count==100)
{
count=0;
second++;//秒加1
if(second==60)
{
second=0;
minute++; //分加1
if(minute==60)
{
minute=0;
hour++; //时加1
if(hour==24)
hour=0;
}
}
}
}