設計要求:按下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一樣)