㈠ 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中的數。
外部中斷查詢這個時間也沒問題,其實就是由這個變數決定中斷的次數吧,從面改變延時的時間長短嗎。再用一個變數,對中斷計數,當這個計數值等於保存的變數值就是延時到。這樣,保存的變數值是可以調節的,也就調節了延時的時間了。