A. 求51單片機P1口輸入實驗C語言版程序。
//P2接74ls273 D0~7
//P3.0 接 74ls273 clk 引腳
//P3.0 接 WR
#include <reg52.h> //52系列單片機頭文件
sbit CLK=P3^0;
sbit WR=P3^1;
void main() //主函數
{
CLK=0;
WR=1;
while(1) //大循環
{
unsigned int time=10;
P2=P1; //P2直接 讀取 P1數值
CLK=1;
while(time--);
CLK=0
}
}
試試 估計差不多
B. 編程:使用單片機P1口控制8個LED。顯示方式:自上而下逐個點亮,再自下而上逐個點亮,如此循環
給你個簡單點的
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV P1,#01111111B ;P1口低電平 對應燈亮 點亮P1.7對應的LED
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#10111111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11011111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11101111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11110111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11111011B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11111101B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11111110B;點亮P1.0對應LED
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11111110B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11111101B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11111011B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11110111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11101111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#11011111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#10111111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
MOV P1,#01111111B
LCALL DLY_500MS ;延時500ms 可以清晰看到每個LED的亮滅情況
SJMP MAIN
;延時250ms子程序
DLY_250MS:MOV R5,#5
DLY1: MOV R6,#100
DLY0: MOV R7,#250
DLY: DJNZ R7,DLY
DJNZ R6,DLY0
DJNZ R5,DLY1
RET
;延時500ms子程序
DLY_500MS:MOV R4,#2
DLY2: LCALL DLY_250MS
DJNZ R4,DLY2
RET
END
C. 用五一單片機c語言編程,p1口控制八個發光二極體,實現每隔一秒,兩兩點亮,並循環。
一、#include<reg51.h>
void delay(unsigned char Xms)//延時Xms
{
int i,j;
for(X = i; X>0; X--)
for(j=110;j>0;j--);
}
void main()
{
P0 = 0x00; //P0.0~P0.7分別接八個發光二極體,剛開始全滅
while(1)
{
delay(1000);
P0 = 0xc0;//點亮前兩個發光二極體P0.0和P0.1;
delay(1000);//延時1秒
P0 = 0x30;//點亮第三個和第四個LED
delay(1000);
P0 = 0x0c;
delay(1000);
P0 = 0x03;
}
}
二、
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp, t0, t1;
bit t2;
sbit P10 = P1^0;
void main()
{
P10 = 1;
temp = 0xfe;
P0 = temp;
P2 = 0xff;
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
ET0 = 1;
EA = 1;
TR0 = 1;
while(1);
}
void timer0() interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
t0++;
if(t0 == 10) {
t0 = 0;
t1++;
if(t1 == 8) {t1 = 0; t2 = ~t2; P10 = t2;}
temp = _crol_(temp, 1);
if(t2) {P0 = temp; P2 = 255;}
else {P2 = temp; P0 = 255;}
}
}
(3)單片機p1口程序擴展閱讀:
例如:a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子裡面的水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程序為:c = a; a = b; b = c;執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c;則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。
順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算、輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。
D. 單片機的P1埠輸出控制8個指示燈LED0~LED7,寫出指示燈LED0到LED7依次流水燈顯示的程序。
與你LED接法有關,輸出1 LED亮 還是輸出0 LED亮
假設輸出1 LED亮,程序如下:
#include<REG51.H>
#define uchar unsigned char
#define uint unsigned int
void delay1ms(uint i) //1ms延時程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void main(void)//主程序
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P1=0x01<<i;
delay1ms(500);
}
}
}