|
tyrl800 發(fā)表于 2024-1-21 09:26
程序沒(méi)問(wèn)題,檢查硬件
/*按鍵K1K2加減數(shù)字?jǐn)?shù)碼管顯示 按鍵K3K4加減數(shù)碼管顯示
#include "STC8H.h"
#include "intrins.h"
unsigned char NixieTable[]={ 0x03,/*0*/
0x9F,/*1*/
0x25,/*2*/
0x0D,/*3*/
0x99,/*4*/
0x49,/*5*/
0x41,/*6*/
0x1F,/*7*/
0x01,/*8*/
0x09,/*9*/};
sbit k1 = P0^3 ;
sbit k2 = P5^4 ;
sbit k3 = P3^6 ;
sbit k4 = P3^7 ;
unsigned int Num,Num1;
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
i = 15;
j = 90;
do
{
while (--j);
} while (--i);
}
void DelayXms(unsigned int x) //@11.0592MHz
{
while (--x)
{
Delay1ms();
}
}
void Led_Seg(unsigned int date) //顯示函數(shù)
{
unsigned int a,b,c;
a=date/100%10; //求百位
b=date/10%10; //求十位
c=date%10; //求個(gè)位
P14=1;P15=1;P33=1;
P2=NixieTable[a];//百位
P14=0;P15=1;P33=1;
DelayXms(5);
P14=1;P15=1;P33=1;
P2=NixieTable;//十位
P15=0;P33=1;P14=1;
DelayXms(5);
P14=1;P15=1;P33=1;
P2=NixieTable[c];//個(gè)位
P33=0;P14=1;P15=1;
DelayXms(5);
}
void Led_Seg1(unsigned int date) //顯示函數(shù)
{
unsigned int a,b,c;
a=date/100%10; //求百位
b=date/10%10; //求十位
c=date%10; //求個(gè)位
P00=1;P01=1;P02=1;
P2=NixieTable[a];//百位
P00=0;P01=1;P02=1;
DelayXms(5);
P00=1;P01=1;P02=1;
P2=NixieTable;//十位
P00=1;P01=0;P02=1;
DelayXms(5);
P00=1;P01=1;P02=1;
P2=NixieTable[c];//個(gè)位
P00=1;P01=1;P02=0;
DelayXms(5);
}
unsigned char keyscan()
{
char x=0;
if ( k1 == 0|k2 == 0|k3 == 0|k4 == 0)
{
DelayXms(10);
if ( k1 == 0|k2 == 0|k3 == 0|k4 == 0)
{
if (k1 == 0) x=1;
else if (k2 == 0) x=2;
else if (k3 == 0) x=3;
else x=4;
while ( k1 == 0|k2 == 0|k3 == 0|k4 == 0);
}
}
return(x);
}
void Timer0_init() //1ms
{
AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TL0 = 0xCD; //設(shè)置定時(shí)初始值
TH0 = 0xD4; //設(shè)置定時(shí)初始值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
ET0 = 1; //開(kāi)T0中斷
EA=1;
}
void main ()
{
P0M0 = 0x00; P0M1 = 0x00;
P1M0 = 0x00; P1M1 = 0xc0;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
k1=k2=k3=k4=1;
Num=123;Num1=456;
Timer0_init() ;
while(1)
{
unsigned char y;
y=keyscan();
if(y!=0)
{
if(y==1) Num++;
else if(y==2) Num--;
else if(y==3) Num1 ++;
else Num1--;
}
}
}
void TM1_Isr0()interrupt 1 //數(shù)碼管掃描定時(shí)器0
{
unsigned int s;
if(++s>1)
{ s=0;
Led_Seg(Num);P00=1;
Led_Seg1(Num1);
}
}
看看這個(gè)四個(gè)按鍵分別控制兩組三位數(shù)碼管加減 |
|