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);
}