1. 51单片机中如何通过一个按键实现暂停与恢复需要一个编程的思想
1、创建项目文件。
2. 51单片机汇编语言如何定义局部变量高手帮帮忙……
51单片机汇编语言如何声明局部变量?
--用 EQU 伪指令,即可。
51单片机定义或声明一个变量在程序执行时是否需要时间?
--伪指令,不占用单片机的时间。
或是定义一个变量,这条指令的执行时间是多少?
--零秒。
--伪指令,不用单片机执行。
3. 我想把51单片机程序运行中的一个中间数据(变量n的值)存储起来,使之掉电不丢失,重新上电后,
现在多数51单片机里都带eeprom存储空间的,例如:at89s系列和stc89c52,查找芯片手册直接调用相关函数读写就可以了。如果51芯片不带eeprom可以使用at24c02芯片,通过i2c和单片机通信,也是很简单的。单片机的flash空间只是用来存储程序的,一般单片机指令是不能直接修改自己的flash空间的。
4. 51单片机如何设置同一个按键,按一下显示123456,再按一下显示321456
51单片机用一个按键,定义一个位变量,或一个8位的变量,按一下键变量为1,再按一下变量为0。然后显示时,再根据变量值来决定显示内容,变量为1,显示123456,变量为0显示321456。
5. c51单片机按键加1,保持
1.设置一个状态变量,如flag,定义flag=0为开状态,flag=1为关状态。
2.因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入。设按键接单片机p01引脚,故可采用以下程序实现按键扫描
if(p01==0)//按下按键,进入下降沿
{
delay2();//20ms延时去按键前抖动
while(p01==0);//等待上升沿到
来,即按键弹起
flag=~flag;//flag取反,实现状态切换
}
void
delay2()//20ms延时子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
注:根据按键的具体接法,若按下按键向单片机输入低电平,则采用以上程序;若按下按键向单片机输入高电平,则将两处p01==0均改为p01==1。
6. 51单片机C语言编程如何实现长按按键实现数值的累加
这个可以用定时器来做,比如检查某键,按键时间超过2秒后一个变量开始累加知道键释放为止。实现方法如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint v=0,time=0;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if((key==0)&&(time>40)v++; //如果按键时间超过2秒且键未释放,变量+1
if(key==1)time=0; //如果键释放,时间复位
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}