㈠ 51单片机按键调节参数值并保存的程序代码
uchar a=50;//假设a的可调范围是1到100;
uint time=0;
eepromEraseSector (0X2800);//擦除EPROM一个扇区
while(time<5000)//不足5s
{
if(s1==0)//S1按下
{ delay_ms(20);
if(s1==0){ while(s1==0);a-- ; time=0; if(a==0)a=100;}
}
if(s2==0)//S2按下
{ delay_ms(20);
if(s2==0){ while(s2==0);a++; time=0; if(a>100)a=0; };
//一旦按键按下,time就清0
}
delay_ms(100);
time+=100;
}
eepromWrite(0x2800, a);//写入 EPROM
㈡ 单片机如何通过按键修改数码管数字(使用尽量少的按键)
看你的原理图中有8个数码管和8个按键,要改变数码管显示的数字,需要写程序实现。写程序的方法可根据需要确定用几个按键。假如是按下每一个按键对应一位数码管改变数字,就用8个按键。假如是数码管显示计数,用两按键,一个做加一键,另一个做减一键。
㈢ 怎样用3*4矩阵键盘,改变51单片机程序里的数据
//考虑易读,使用3个标志
char flag=0; //修改状态=1
char f_change=0; //日期修改标志=1,时间修改标志=2,var修改标志=3
char num_on=0; //数字键盘
//按键:
//11=修改, 10=退出修改
//1=date,2=time,3=var为多功能键,必须使用num_on来切换
//按键还需有个keydown()判断键是否按下
/*****************************************************/
//判断键是否按下
/*****************************************************/
int keydown(void)
{
}
void proc_key(void)
{
switch(f_change)
{
case 1:funDate(K);break;
case 2:funTime(K);break;
case 3:funVar(K);break;
default:break;
}
}
main()
{
.....
while(1)
{
if(keydown())
{
K=keyscan();
switch(K)
{
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
if(num_on)
{
proc_key();
}
break;
case 1:
case 2:
case 3:
if(num_on)
{
proc_key();break;
}
if(!f_change && flag)
{
f_change=K;
num_on = 1;
}
break;
case 10:f_change=0;flag=0;break; //结束修改
case 11:f_change=0;flag=1;break;
default:break;
}
}
}
}
㈣ 51单片机四个独立按键设置四个参数C语言程序
同楼下,您还是回家种红薯吧,最鄙视这种直接把题目贴上来让别人写代码的!不思进取只想不劳而获!还学给毛,还不如赶紧回家种红薯,或者家里有钱的话回去坑爹。
㈤ 32单片机怎么利用按键实现阈值上下限更改
32单片机在模式2下利用按键实现阈值上下限更改。根据查询相关资料信息,32单片机在模式1下,可以通过按键设置物品单价,从而计算出总金额。在模式2下,可以通过按键来设置上下限阈值,提高称重的精准度。
㈥ 单片机中怎样设置一个变量控制按键数
可以有位定位的位变量来控制按键,也可以用端口来控制。
当按键被按下的时候,电路导通接地,I/O口为低电平。当按键未被按下时,电路断开,I/O口保持高电平。当检测到某一个按键按下时,对我们设置的一个变量(下边用keynumber)赋值,这样就实现了输入的效果。
一般的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,假如不加以处理,会导致按键被识别为按下多次。为了不产生这种现象而作的措施就是按键消抖。
㈦ 51单片机数码管显示CD4060的频率并通过按键更改其频率怎么编程啊(最好汇编)
s1 bit p0.0 ;数码管位定义
s2 bit p0.1
s3 bit p0.2
s4 bit p0.3
s5 bit p0.4
s6 bit p0.5
s7 bit p0.6
s8 bit p0.7
led_data equ p2 ;数码管数据定义
org 00h ;程序开始
jmp main ;主程序开始处
org 030h ;主程序从30H开始
main: MOV sp,#30h ;设置堆栈
lcall rest ;调用初始化程序
lcall pro_8led ;调用数码管显示程序
jmp main ;返回
;********* 初始化程序 **************
rest:MOV a,#00h ;清寄存器
MOV b,#00h ;清寄存器
MOV p0,#0 ;禁止数码管显示
MOV p2,#255 ;
MOV p1,0ffh ;禁止LED显示
clr beep ;禁止蜂鸣器
ret ;返回
;******** 数码管显示程序 ***************
pro_8led:
MOV b,#32 ;一共显示32个数字
clr psw.3 ;重新设置寄存器组
setb psw.4 ;
MOV r0,#00h ;数据显示从0开始
MOV r1,#01h ;数码管从第1个开始
loop:MOV p0,r1 ;点亮当前数码管
MOV a,r0 ;准备第一个数据
MOV dptr,#tab_nu ;获得表头
MOVc a,@a+dptr ;得到第一个数据
MOV led_data,a ;输出到显示数据口
lcall delay ; 500 ms 延时
lcall delay ; 1 s 延时
inc r0 ;准备下一个数据
MOV a,r1 ;准备下一位数码管
rlc a ;设置下一个数码管
jc c1 ;8位全部显示,转移
MOV r1,a ;否则,设置下一位
djnz b,loop ;32个数没有显示完,返回显示
ret ;否则返回主程序
c1: MOV r1,#1 ;8位显示完,重新开始循环
clr c ;设置显示位
djnz b,loop ;32位显示完则返回重新显示
ret ;否则返回到主程序
;************* 数码管显示 *******************************
;************* 软件延时 500ms *****************************
delay: push psw ; 保存原来的寄存器内容
clr psw.3 ;
clr psw.4 ; 设置新的寄存器组
MOV r0,#2 ; 延时参数1
MOV r1,#250 ; 延时参数2
MOV r2,#2 ; 延时参数3
dl1:djnz r0,dl1 ; 延时循环1
MOV r0,#250 ;
dl2:djnz r1,dl1 ; 延时循环2
MOV r0,#240 ;
MOV r1,#248 ;
dl3:djnz r2,dl1 ; 延时循环3
nop ; 定时精度调整
pop psw ; 恢复原来的寄存器
ret ; 返回
;**********************************************************
;**********************************************************
;这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16
; 比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推
tab_nu:
db 0c0h, 0f9h, 0a4h, 0b0h, 99h , 92h , 82h, 0f8h ; 数字0-7 不带小数点代码
db 80h , 90h, 88h , 83h , 0c6h, 0a1h, 86h, 8eh ; 数字8-f 不带小数点代码
db 40h , 79h, 24h , 30h , 19h , 12h , 02h, 78h ; 数字0-7 带小数点代码
db 00h , 10h, 08h , 03h , 46h , 21h , 06h, 0eh ; 数字8-f 带小数点代码
end
㈧ 单片机定时器如何用按键调整
判断咯
while(1) 监控外面状态
将延时函数的定义成delay(int a){while(a--);}这种形势
调用的时候可以用delay(b); b的定义为全局变量
可以设定一个初值
如果有按键按下 在判断按键按下的时候 将b的值改变成你想要的就OK
如果不用WHILE 监控状态 用外部中断也可以
按键读取别忘记去抖哦 :-)
㈨ 单片机,通过按键修改程序内的延时时间。
这个时间存储在单片机内部,掉电不丢失,是完全可以,STC89C52有内部EEPROM,就保存这里,根本就不需要什么外部器件。
只要定义一个变量,根本时间长短,定义成8位,或16位数。
按加和减按键时,就增加或减少这个变量,每次调节后就保存一次这个变量,即保存在EEPROM中,STC技术资料中有EEPROM读写例子程序。
然后开机后先读出保存在EEPROM中的数。
外部中断查询这个时间也没问题,其实就是由这个变量决定中断的次数吧,从面改变延时的时间长短吗。再用一个变量,对中断计数,当这个计数值等于保存的变量值就是延时到。这样,保存的变量值是可以调节的,也就调节了延时的时间了。