|
你原來的程序,輸入0~9,都顯示2,其它的顯示.,沒什么大問題。
我修改了一點(diǎn)點(diǎn),就可以達(dá)到你的目標(biāo)要求了:輸入0~9,就顯示輸入的那個(gè)數(shù)值,輸入其它的,都顯示.。
#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit signal_in_A = P2^2; //define the input pins for 74HC138
sbit signal_in_B = P2^3;
sbit signal_in_C = P2^4;
u8 display_digit[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f};
int received_data;
void delay(u16 i)
{
while(i--);
}
void dynamic_scan()
{
u8 counter;
int is_digits;
is_digits = received_data / 10;
for(counter=0; counter<8; counter++)
{
if(is_digits==0)
{
P0 = display_digit[received_data];//0x5b;
delay(100); // about 1s
P0 = 0x00; // erase shadows
}
if(is_digits!=0)
{
P0 = 0x80;
delay(100); // about 1s
P0 = 0x00; // erase shadows
}
switch(counter)
{
case 0:
signal_in_A = 0; signal_in_B = 0; signal_in_C = 0;
break;
case 1:
signal_in_A = 1; signal_in_B = 0; signal_in_C = 0;
break;
case 2:
signal_in_A = 0; signal_in_B = 1; signal_in_C = 0;
break;
case 3:
signal_in_A = 1; signal_in_B = 1; signal_in_C = 0;
break;
case 4:
signal_in_A = 0; signal_in_B = 0; signal_in_C = 1;
break;
case 5:
signal_in_A = 1; signal_in_B = 0; signal_in_C = 1;
break;
case 6:
signal_in_A = 0; signal_in_B = 1; signal_in_C = 1;
break;
case 7:
signal_in_A = 1; signal_in_B = 1; signal_in_C = 1;
break;
}
}
}
void serial_init()
{
TMOD = 0x20;
TH1 = 0xf3;
TL1 = 0xf3;
PCON = 0x80;
TR1 = 1;
SCON = 0x50;
ES = 1;
EA = 1;
}
void serial() interrupt 4
{
received_data = SBUF;
RI = 0;
SBUF = received_data;
while(!TI); // wating for SBUF compeleting sending data
TI = 0;
}
void main()
{
serial_init();
while(1)
{
dynamic_scan();
}
}
我在我的HC6800-ES-V2.0板子上通過,用的STC-ISP下載軟件中的串口功能就可以得到正確結(jié)果 |
|