设计要求:按下S4键则灯由上向下流动然后灯全亮,按下S5键则灯由下向上流动然后灯全灭,蜂鸣器报警 这个这么久我才做出来 我擦.
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit WEI=P2^7; //U2 74HC573的LE端 数码管的位选端
sbit DUI=P2^6; //U1 74HC573的LE端 数码管的段选位
sbit SJ=P1^4; //LED发光管的使能端
sbit spk=P2^2; //蜂鸣器
sbit S4=P3^6; //按键S4
sbit S5=P3^7; //按键S5
uint num;
uint i;
uint j;
uchar code table_1[]={
0x7F,0x3F,0x1F,0x0F,
0x07,0x03,0x01,0x00
};
uchar code table_2[]={
0x01,0x03,0x07,0x0F,
0x1F,0x3F,0x7F,0xFF
};
void delay(uint Z)
{
for(i=Z;i>0;i--)
for(j=0;j<1000;j++);
}
void main()
{
SJ=0; //开LED总使能
WEI=1; //让位选的U2 74hc573处于直通状态
DUI=1; //让段选的U2 74hc573处于直通状态
P0=0xff; //让所有数码管不显示,防止数码管干扰
WEI=0; //锁存,让位选的74hc573保持现在的状态不变,也就是一直不显示,如果不写这几行,数码管和点阵也会显示
DUI=0; //锁存,让段选的74hc573保持现在的状态不变,也就是一直不显示,如果不写这几行,数码管和点阵也会显示
while(1)
{
if( S4==0)
{
spk=1;
for(num=0;num<8;num++)
{P0=table_1[num];delay(100);}
}
else if (S5==0)
{
for(num=0;num<8;num++)
{P0=table_2[num];delay(100);}
spk=0;
}
}
}
我写的第一个程序
用了一个多小时
遇到几个问题,想请教一下:
第一就是 电路 LED是P0控制的 跟视频有不一样的 能不能列个单那样的 跟视频不一样的连接的地方 我找起来方便些 ,不弄也无所谓 不是什么问题
编程遇到的问题 变量难道必须是 全局变量吗 在 for(num=0;num<8;num++) 这里定义 uint num到时候 编译错误 是什么情况 我搞不懂
还有就是 按键 操作 能不能用 switch语句实现 我想写 但是 switch(变量)这个变量这里不知道怎么处理,怎么去识别按键 这个是不是集合一个函数(假如有这么一个函数,专门用来识别按键的,返回的是按键的标志位,就像中断返回的interrupt一样)