导航:首页 > 操作系统 > 单片机用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区别相关的资料

热点内容
php去掉小数后面的0 浏览:950
阿里备案买什么服务器 浏览:261
网络驱动下载到哪个文件夹 浏览:481
达内程序员培训西安 浏览:505
人保送车主惠app上怎么年检 浏览:604
android手机开机密码 浏览:480
linux查看某个进程命令 浏览:529
闲置的腾讯云服务器 浏览:437
rar压缩包mac 浏览:626
php混淆加密工具 浏览:581
java把数字拆分 浏览:464
如何下载svn服务器旧版本 浏览:559
命令与征服4攻略 浏览:914
实数四则运算法则概念 浏览:295
cs16优化命令 浏览:873
Minecraft云服务器免费 浏览:830
png压缩最小 浏览:184
老韩综app怎么看不了了 浏览:229
只有一个程序员的体验 浏览:323
用服务器地址怎么有网 浏览:552