各位好:
剛巧早日看到這標題, 我也是初學單片機, 見這題目, 我按照原同學思路及要求修改如下, 多謝指正
#include <reg52.h>
#include <intrins.h>
#define SMG_duan P0 //定義數碼管段碼 為 P0端口
#define SMG_wei P2 //定義數碼管位碼 為 P2端口
sbit key1 = P3^0; //定義 key1~key3 輸入為 P3.0~P3.2 端口
sbit key2 = P3^1;
sbit key3 = P3^2;
char Wei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
char Duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delayxms(unsigned int x) //這延時函數是原同學的設計
{
unsigned char i, j;
while(x>0)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
}
while (--i);
x--;
}
}
void main()
{
unsigned char a;
unsigned int b;
while(1)
{
if(key1 == 0) // key1被按下時執行
{
SMG_duan = 0x00;
delayxms(20);
while(!key1); // key1放開時顯示
SMG_duan = Duan[6]; // 顯示 66666666
SMG_wei = 0X00;
}
if(key2 == 0) // key2被按下時執行
{
SMG_duan = 0x00;
delayxms(20);
while(!key2); // key2放開時顯示
while(key1!=0 && key2!=0 && key3!=0) // 此處原程序有錯 while(1)會進入死循環, 所以我検查這
{ // 三個按鍵作為退出條件
for(a=0; a<6; a++)
{
SMG_duan = Duan[a+1]; SMG_wei = Wei[a]; delayxms(1); //顯示 123456
}
}
}
if(key3 == 0) // key3被按下時執行
{
SMG_duan = 0x00;
delayxms(20);
while(!key3); // key3放開時顯示
b = 500;
while(b--)
{
for(a=0; a<=1; a++)
{
SMG_duan = Duan[a]; SMG_wei = Wei[7-a]; delayxms(1); // 先用動態型式顯示 10
}
}
for(a=0; a<=9; a++) // 此處我曾經用a=9;a>0;a-- 但出現循環, 原因我定了
{ // a為uchar, 所以沒有負數, 永遠為0, for為死循環
SMG_duan = Duan[9-a]; SMG_wei = Wei[7]; // 再用靜態型式顯示 9~0
delayxms(1000);
}
}
}
}
*/*** 這個程序我是用普中開發板通過, 所以程序有些部份需配合開發板設計 ***/
*/*** 這個程序我設計是先按下, 放手后執行顯示 ***/
|