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

热点内容
本地电脑怎么把文件上传到服务器 浏览:775
windows98密码怎么加密 浏览:396
网页编程时如何打开网页 浏览:404
文明6怎么登入2k服务器 浏览:585
linux发行版命令 浏览:434
湘潭国企程序员招聘 浏览:26
目送pdf 浏览:361
pdf如何只读文件 浏览:479
2019基金从业教材pdf 浏览:966
mvc的编程思想 浏览:712
北京机架式服务器云空间 浏览:555
电脑装了svn服务器是什么 浏览:409
多媒体压缩和编码 浏览:880
php仿百度搜索 浏览:364
单片机做混响 浏览:103
下雨了程序员笑话 浏览:491
程序员交通卡哪家好 浏览:817
液体能压缩吗 浏览:974
程序员穿特步相亲受拒 浏览:425
我的世界命令方块获得超强装备 浏览:426