?? net test.c
字號:
#include <Reg51.h>
#define Master_LED P2
#define Slaver_LED P3
#define D_LED P2^7
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
unsigned char code direct [] = { 0x06, 0x5b, 0x4f, 0x66, 0x6d,
0x7d, 0x07, 0x7f, 0x6f,0x3f};
//--------------------------
// 共陰數碼管,交叉線, 1-3,3-1,2-6,6-2? 的 1~9,0顯示表
unsigned char code across [] = {0x21, 0x7c, 0x6d, 0x63, 0x4f,
0x5f, 0x25, 0x7f, 0x6f, 0x3f};
unsigned char key_val = 0;
unsigned char counter = 0;
unsigned char key_counter = 0;
unsigned char step_counter = 0;
void timer0_int(void);
void delay(unsigned int i);
void direct_test(unsigned int j);
void across_test(unsigned int k);
void lin_dot(unsigned int a);
main()
{
counter = 4;
key_val = 0xfb;
TH0=0x3B; //給計數寄存器高8位賦初值
TL0=0xC0; //給計數寄存器低8位賦初值
ET0 = 1;
EA = 1;
TR0=1;
while (1)
{
while (key_val == 0xfe)
{
step_counter = 0;
direct_test (key_counter++);
if (key_counter == 10)
{
key_counter = 0;
}
}
while (key_val == 0xfd)
{
step_counter = 0;
across_test (key_counter++);
if (key_counter == 10)
{
key_counter = 0;
}
}
while (key_val == 0xfb)
{
lin_dot (0);
step_counter = 0;
}
while (key_val == 0xf7)
{
Master_LED = 1<<(step_counter-1);
Slaver_LED = 1<<(step_counter-1);
}
}
}
void delay(unsigned int i )
{
signed int j,k;
for(k=0;k<i;k++)
for(j=0;j<1000;j++);
// Master_LED = 0x00; //直通線的標記
}
//直線測試函數Slaver_LED,Master_LED,由1~9,0顯示
void direct_test(unsigned int j)
{
Master_LED = 0x81; //直通線的標記
Slaver_LED = 0x81;
delay(50);
Master_LED = direct[j];
Slaver_LED = direct[j];
delay(50);
}
//交叉線測試函數Master_LED直顯示,Slaver_LED,1-3,2-6,數值互換
void across_test(unsigned int k)
{
Master_LED = 0xC0; //0x40; //交叉線的標記
Slaver_LED = 0xC0; //0x40;
delay(50);
Master_LED = direct[k];
Slaver_LED = across[k];
delay(50);
}
//---------------------------------
//兩邊按順序單點顯示由a~g,.共8段,
//
void lin_dot(unsigned int a)
{
unsigned char x = 1;
//unsigned int h = a;
while(a!=8)
{
a++;
if(x == 0x00)
x = 1;
//Slaver_LED = direct[a];
//Master_LED = direct[a];
delay(50);
Slaver_LED = x;
Master_LED = x;
x = x<<1;
delay(50);
}
}
void timer0_int(void) interrupt 1
{
TR0=0; //停止計數
TH0=0x3B; //給計數寄存器高8位賦初值
TL0=0xC0; //給計數寄存器低8位賦初值
if(!(counter--)) //當計完2次后=0,取反為1,之后在改變回初值,重新計數。
{
counter=0x01;
if (P1 != 0xff)
{
key_val = P1;
if (key_val == 0xf7)
{
if (step_counter == 8)
{
step_counter = 0;
}
step_counter++;
}
while (P1 != 0xff);
}
}
TR0=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -