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