各位好:
刚巧早日看到这标题, 我也是初学单片机, 见这题目, 我按照原同学思路及要求修改如下, 多谢指正
#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);
}
}
}
}
*/*** 这个程序我是用普中开发板通过, 所以程序有些部份需配合开发板设计 ***/
*/*** 这个程序我设计是先按下, 放手后执行显示 ***/
|