導航:首頁 > 操作系統 > 單片機加1

單片機加1

發布時間:2022-04-03 13:17:01

A. C51單片機中,如何實現按一次鍵,技術器加1,就是每按一次計數器就加1

你說的這個計數器是單片機裡面的定時器/計數器嗎?還是用變數做計數器?

B. 一位數碼管連在51單片機上,按鍵後數碼管加1,按一下加1.怎樣用匯編語言編寫

一、圖貌似有點問題:
1、用的是共陰極數碼管,如果用單片機直接驅動的話,應該用共陽極的;
2、所有LED(包括數碼管)都未接限流電阻,建議串接470歐左右的;
3、單片機直接驅動「sounder」,估計驅動電流不夠,建議接三極體後再輸出
二、程序可以借鑒樓上的,但需要修改:
......
SETB P1.0
JNB P1.0,$
......
在這2句之間需要加入:
JB 1.0 LP0
LCALL DELAY_50MS
另:加入子程序DELAY_50MS
DELAY_50MS:
MOV R7,#0C3H
LP_DL:
MOV R6,#00H
DJNZ R6,$
DJNZ R7,LP_DL
RET

如果換成共陽極數碼管後,數據表換成以下的:
TABLE: ;表:共陽數碼管 0-9 A-F
DB 0C0H,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
以上意見供參考

C. C51單片機1位數的加1計數顯示

從你描述的現象來看,書上是寫錯了,P2口可能有一位是控制數碼管的位選,因為只有一個,所以P2的一位是控制數碼管是否顯示。P0口控制段選。

D. 單片機按鍵按一次就加一

按鍵相對是個低速任務。你按的再快,一秒可以按十次嗎?什麼?你可以。。那你就是作弊了。因為哪怕你反應的過來。按鍵可不行。所以。這個本質你需要牢牢抓住。那麼你可以選擇一秒之內只檢測幾次按鍵。把幾乎是連續在使用的機器時間碎片化。比如在一個碎片里只查一次按鍵。是的,你現在就是這么做的。只是循環太快。碎片太多。按鍵的抖動你都查到了。所以你需要的僅僅是慢下來。極限就是剛剛說的查10次。算算,這是一個100ms的定時。明白定時器的真正用途了嗎?如果你實際這么實驗了你會發現這的確有效。不會加個成百上千了。接下來你需要設置一個邏輯讓按鍵檢測只對下降沿起作用。最好的辦法就是和前次的狀態比較。如果上次的狀態為高而此次狀態為低。那麼這就是個下降沿。於是你需要一個寄存器保存上一次的狀態。並每次比較後更新。原來這寄存器是這么用的。。實際實驗後發現這么干已經可以保證基本每次長按只會加1。但是短按似乎會丟失。那是因為。100ms實在是長了些。電平保持100ms有時是太難了。所以,你可以適當提高頻率。比如提高10倍。以10ms為周期。基本能解決大多數問題。

E. 單片機 一個按鈕設置按一下加1 另一個按鍵按一下減1 求幫忙編寫程序

#include<reg52>
#define uchar unsigned char
#define uint unsigned int
sbit K1 = P1^4;
sbit K2 = P1^5;
uchar data K1state;
uchar data K2state;
uint data num,ntmp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x06f,0x77,0x7c,0x39,0x5e,0x79,0x71} ;
uchar data showIndex,indexTmp;
uchar data W[8];
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);//能使之延時接近1毫秒就成 無需精確
}
void main()
{
K1state = 0xFF;
K2state = 0xFF;
num = 0;
while(1)
{
delay(1);//每毫秒輪詢一回
//移位法,延時防抖
K1state = (K1state<<1);
K2state = (K2state<<1);
if(K1) K1state++;
if(K2) K2state++;
//檢查開關狀態
if(K1state==0x80) num++;
if(K2state==0x80) num--;
for(indexTmp=0,ntmp = num;indexTmp<=7;indexTmp++)
{
W[indexTmp] = num%10;
num /=10;
}
P0 = (0x01<<showIndex);//位選
P2 = table[W[showIndex]];//段選
showIndex++;
if(showIndex>=8)
showIndex=0;
}
}

看了你的全圖,修改後了,用Keil uVision 3或4都可以,編譯後可以查看對應的匯編代碼

程序稍大一點的,不會有人用匯編來給你蘑菇,匯編設計寫編碼太慢了,開發代價不值得

F. 求救:c51單片機按鍵每按一次同時數碼管顯示數字加一

-
建立一個數組,用於存放 0-9的段碼。
int Shuzu[]={---------};
如果會用指針
int *P;
P=Shuzu; //指針指向數組!
用外部中斷,
每中斷一次,中斷服務程序將數組元素加一P0=Shuzu[ax++](或指針加一:P0=*P++)
以上假設P0口驅動數碼管!
至於數碼管使用的是共陽還是共陰,就把相對的數值存在數組中!
-
外部中斷0的中斷程序入口
void TI_0() interrupt 0
{
--------
}
都提示到這里了,下面自己該會吧?
如果是新手的新手---想要我幫你寫全部程序--
那至少你得把你單片機晶元型號說給我才能幫你!
還有數碼管是用單片機哪個IO口!
數碼管是怎麼連接的?(串/並)

G. 51單片機編程開關每按一次,顯示器顯示的內容就加1

單片機設計是個系統工程,包括硬體設計(含鍵盤,顯示,外存儲等)和軟體設計,不是幾句話就能說清的

H. 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。

I. 單片機中,inc指令是在執行前加1還是執行後加1

具體執行方法如下
首先需要在編程區域輸入指令的執行條件,在左母線右側輸入:LD X2,當X2接通時運行加1指令。

然後輸入加1指令:INCP D0。其含義為當執行此指令時,D0的數據自動加1,INC與INCP的區別在於:INC是程序運行每個周期都加1,而INCP是脈沖指令型指令,只在第一個掃描周期執行加1.

編寫好程序先對程序進行轉換,然後點擊模擬測試按鈕將程序寫入模擬PLC。

點擊測試窗口的「菜單啟動」然後選擇「繼電器內存監視」。

從監視窗口選擇位軟元件X和字軟元件D。

通過模擬模擬可以看到:當X2每次接通時,目標操作數都會進行加1運算。

注意事項:
若不採用脈沖型,當X2接通時,D0會一直進行加1運算。
參考資料來源:吳鑒鷹吧
貢獻文檔:網路文庫《吳鑒鷹單片機項目實戰精講》
參考實例:吳鑒鷹單片機開發板

閱讀全文

與單片機加1相關的資料

熱點內容
程序員職業穿搭 瀏覽:254
程序員軟考大綱 瀏覽:16
命令窗口輸入後不滾動 瀏覽:638
C面向切面編程aop例子 瀏覽:368
windowsrar命令 瀏覽:379
單片機編程語言有哪些 瀏覽:441
蘋果安卓系統筆記本怎麼設置密碼 瀏覽:982
只能加密不能解密有什麼用 瀏覽:239
怎麼製造app 瀏覽:121
電腦解壓死機了怎麼辦 瀏覽:607
歐洲伺服器雲進銷存 瀏覽:192
程序員python和java 瀏覽:949
文件夾怎麼插入幻燈 瀏覽:282
帶孩子到崩潰怎麼解壓 瀏覽:63
戰地一被踢出伺服器會顯示什麼 瀏覽:837
怎麼看手機上所有的app 瀏覽:365
網路拚命令怎麼拼 瀏覽:836
產品經理和程序員優先選哪個 瀏覽:393
樸素的app應用怎麼推廣 瀏覽:586
怎麼查校園卡app專屬流量 瀏覽:437