导航:首页 > 操作系统 > 单片机用temp赋值给P1区别

单片机用temp赋值给P1区别

发布时间:2023-06-13 14:14:30

Ⅰ 注释一下 单片机程序

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //8个数码管的位选择信号表
uchar code display[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //1-8的共阴字码表
sbit wei=P3^7; //P3.7用于控制哪位显示
sbit rest=P2^7; //P2.7用于复位
void delay(uint z) //延时函数,入口参数Z.具体延时于晶振频率有关
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
main() //主函数
{
uchar i,temp;
P0=0xff; //P0口全部拉高,置1
delay(10); //延时delay(10)MS
wei=1; //P3.7置1
while(1) //循环扫描P1口按键状态
{
temp=0xfe; //temp存扫描码
for(i=0;i<8;i++) //循环8次,即扫描8个按键
{
if(P1==temp) //如果P1口读入的状态等于当前扫描码
{
delay(10); //延时去抖
if(P1==temp) //再读P1口比较
{
while(1) //确定按键有效,进入循环体
{
if(rest==0) //如果P2.7==0
{
delay(10); //延时去抖
if(rest==0) //确定P2.7脚按键按下
{
P0=0xff; //P0口拉高
P3=0; //P3口送0 ,即熄灭所有LED数码管
while(rest==0); //如果P2.7的按键一直按下,则等待
break; //如果P2.7按键弹开,则跳出循环体,重新扫描按键
}
}
else //如果P2.7==1,即复位键没有按下
{
P0=table[i]; //P0口送出P1口按键对应位的位控号
P3=display[i]; //P3口送对应的段码值,形成显示
}
}
}
}
temp=(temp<<1)|0x01; //temp左环移,扫描下一按键
}
}
}
该程序实现的功能大概是:将P1口按键的状态显示到对应位的LED管上,比如按下第2个键,会在第2个数码管上显示2同时按下多个键也一样,按下哪几个就对应显示哪几个键的值.按下复位按键后,所有数码管
熄灭.
希望我猜得对,忽忽

Ⅱ 52单片机,取位逻辑运算,下面两种写法,为什么P1最终值不同

当然不一样,P1=state[sta]; 是直接赋值给 P1;
而 temp|=state[sta]; 则是先 temp“或" state[sta] ,结果就有可能不等于 state[sta] 了;

阅读全文

与单片机用temp赋值给P1区别相关的资料

热点内容
如何欺骗网游服务器 浏览:934
直接卡密登陆短信测压系统的源码 浏览:960
课经pdf 浏览:299
c动态编程 浏览:34
浣熊PDF 浏览:770
grep命令表达式 浏览:108
程序员半年了找不到工作怎么办 浏览:961
深圳6k程序员 浏览:520
刷脸支付oem需要源码吗 浏览:166
如何在线压缩动态图片 浏览:113
vb字母表加密 浏览:613
红帽磁盘命令 浏览:868
cmd命令大全ip地址 浏览:14
服务器被攻击什么意思 浏览:73
看去哪个app 浏览:163
埃微手环用什么app 浏览:567
培训需要编程基础吗 浏览:338
程序员写论文需要什么条件 浏览:600
三菱电机压缩机待遇 浏览:889
android电源关机 浏览:521