A. 51單片機控制16個led燈,要求16個燈依次點亮後依次熄滅
假設16個燈接P0和P1,高電平點亮,每次亮一個燈
程序大致這樣:
uint b;//16位變數對應16個燈
uchar i;
while(1)
{
for(i=0;i<16;i++)
{
b=0x01<<i;
P0=b;//自動取低8位
P1=b<<8;//取高8 位
delayms(200);
}
}
B. 51單片機,16個燈依次點亮後依次熄滅,跪求!!!
#include "REG52.H"
#define LEDH8 = P1;//所有LED 陽極接電源
#define LEDL8 = P2;//所有LED 陽極接電源
u8 LED_Status = 0xfe; // LED燈指示狀態
u8 LED_bit = 0; //LED指示燈位 0-15
void Init_GPIO()
{
LEDH8 = 0xff; LEDL8 = 0xff; //熄滅所有LED
}
void Delay( u16 dat )
{
u16 i, j ;
for( i = dat; i>0; i-- )
for( j=100; j>0; j--);
}
int main ()
{
Init_GPIO();
while(1)
{
switch (LED_bit)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7: LEDL8 &= LED_Status ; break ;
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15: LEDH8 &= LED_Status ; break ;
default : break;
}
Delay( 1000);
LED_bit++;
LED_Status = (LED_Status <<1);
}
}
C. 51單片機有沒有16位的什麼型號
MCS-251單片機就是16位的,能兼容運行MCS-51單片余備尺機的指令。當然現在很少很少聽說有豎高這單片機了。
MCS-196單片機雖然是16位,但和51沒有半點關滾敏系。
D. 51單片機16位特殊功能寄存器有幾個
51單片機16位特殊功能寄存器只有PC和DPTR,其中PC不可以直接操作,就剩下DPTR了。
另外定時器雖是16位的,但被分成了兩個8位寄存器分別操作。
E. 51單片機能做兩個16位的加法運算嗎如1010h和1010h,求大蝦!!!!!
沒有問題的,可以的,如用匯編
MOV R5, #10H ; 第一數據高位元組
MOV R4,#10H ; 第一數據低位元組
MOV R3, #10H ; 第二數據高位元組
MOV R2,#10H ; 第二數據低位元組
MOV A, R4
ADD A, R2
MOV R4, A ; 和低位元組 在 R4 中
MOV A, R5
ADDC A, R3
MOV R5, A ; 和高位元組 在 R5 中
RET
F. 51單片機的T0計數器是16位可以用什麼和什麼表示
方式0,為13位定時器/計數器,計數范圍是0到2的13次方減中漏敬1。
方式1,為16位定時器/計數器,計數范圍是0到2的16次方減1。
方式2,為8位初值自動重裝的8位定時器/賣慎計數器,所以它的計數范圍是0到2的8次方減1。
方式3,僅適用於T0,分成兩個8位計數器,T1停止計搜滑數,8位計數器的計數范圍是0到2的8次方減1。
G. MCS-51單片機的片內有( )個16位的特殊功能寄存器
mcs-51單片機內的i/o口鎖存器、定時器、串列口緩沖器以及各種控制寄存器和狀態寄存器都以特殊功能寄存器的形式出現
。它們位於片內數據存儲器之上,離散地分布在80h~ffh的地址空間范圍內。mcs-51單片機特殊功能寄存器的總個數為26個
。其中有12個可以位定址,用戶可以通過位功能標記對這12個寄存器的任意一個有效位進行操作。
這些特殊功能寄存器頒在以下各個功能部件中:
(1)cpu:acc、b、psw、sp、dptr(由dpl和dph兩個8位寄存器組成);
(2)中斷系統:ip、ie;
(3)定時器/計數器:tmod、tcom、tl0、th0、tl1、th1;
(4)
並行i/o口:p0、p1、p2、p3;
(5)
串列口:scon、sbuf、pcon。
51單片機的寄存器基本上都是8位的,而16位都是由兩個組裝起來的,例如dptr以及定時器t0與t1
H. 51單片機,利用0和1兩個數字組成16種模式,並用四個開關控制數碼顯示一位密碼求程序設計
以下是使用51單片機(如STC89C52)和4個開關來控敏搭槐制數碼管顯示一位密碼的簡單示例代碼。假設使用的是共陰數碼管,並且數碼管的引腳連接到了單片機的P0口。
#include <reg52.h> // 引入單片機寄存器定義頭文件// 數碼管顯示的密碼模式,共16種,每種模式使用4位二進製表示unsigned char password[16] = { 0x3F, // 0b00111111, 模式0
0x06, // 0b00000110, 模式1
0x5B, // 0b01011011, 模式2
0x4F, // 0b01001111, 模式3
0x66, // 0b01100110, 模式4
0x6D, // 0b01101101, 模式5
0x7D, // 0b01111101, 模式6
0x07, // 0b00000111, 模橋友式7
0x7F, // 0b01111111, 模式8
0x6F, // 0b01101111, 模式9
0x77, // 0b01110111, 模式10
0x7C, // 0b01111100, 模式11
0x39, // 0b00111001, 模式12
0x5E, // 0b01011110, 模式13
0x79, // 0b01111001, 模式14
0x71 // 0b01110001, 模式15};void main() { unsigned char i = 0; // 密碼模式的索引
while (1) { // 讀取四個枝豎開關的狀態,每個開關對應一個二進制位
unsigned char switchValue = (P1 & 0x0F); // 根據開關狀態選擇密碼模式
i = switchValue; // 設置數碼管顯示的密碼模式
P0 = password[i]; // 簡單延時
for (unsigned int j = 0; j < 1000; j++);
}
}
以上代碼通過讀取四個開關(連接到P1口的低4位)的狀態來選擇密碼模式,並將選擇的密碼模式通過P0口設置到數碼管上顯示。
I. 51單片機怎麼接收電腦發送的16位數據
51單片機是8位的,一次只能接一個位元組,你這16位的,要分兩次的。
電腦串口也是按兩次來發送,也就是把這個16位的拆成兩個位元組,所以每個位元組發送都是遵循串口協議的,你在單片機裡面開串口接收中斷即可。
你可能會疑問,要是第一個位元組中斷了,進入中斷函數接第一個位元組後,那第二個位元組會不會錯過,來不及接收?
這個不會的,上面說了,第二個位元組也是按串口標准發的,也就是起始位,數據位,(校驗位),結束位。
電腦在發一個位元組後,又會接著發第二個位元組。可是,要知道串口的波特率是很低的,遠遠比單片機的處理速度低。當你接了第一個位元組,將此位元組做一些處理,比如存起來時,電腦可能都還沒開始發第二個位元組呢,因為電腦發數據的速率是以K為單位的,而單片機處理速度是以M為單位的。
因此,不用擔心第二個位元組會丟失。