
sbit led=P1^0 //单拿悄片机管脚位声明
void main()
{
TMOD=0x01 //定时器TO工作在方式1
TH0=(65536-5000)/256 /橘敏猜/装初值,12M晶振 1为1us 5000为5000us=5ms;
TL0=(65536-5000)%256
EA =1 //开总中断
ET0=1 //开定时器TO中断
TR0=1 //启动定时器圆型
P1=0 //初始化P1口
while(1) //程序在这里等待中断发生
}
void T0_time() interrupt 1
{
unsigned char num
TH0=(65536-5000)/256
TL0=(65536-5000)%256
num++
if(num==100)//0.5S (1s闪烁1次==0.5S亮0.5S灭)
{
num=0
led=~led //led状态取反
}
}
#include<reg51.h>#define uchar unsigned char
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00} //0到山搜早9
uchar num,cnt,disn
uchar keyval,disk
uchar led[]={1,2,3,4}
void dealdat(uchar a)
{
led[0]=0
led[1]=0
led[2]=0
led[3]=0
led[a]=disk
}
void delay(unsigned int a)
{
unsigned int i,j
for(i=0i<ai++)
for(j=0j<1000j++)
}
void t0isr() interrupt 1
{
TH0=(65536-5000)/256
TL0=(65536-5000)%256
switch(num)
{
case 0:P2=0x01break
case 1:P2=0x02break
case 2:P2=0x04break
case 3:P2=0x08break
default:break
}
P0=~tab[led[num]]
num++
num&=0x03
cnt++
if(cnt>100)
{
cnt=0
disn++
disn%=4
dealdat(disn)
}
}
uchar kbscan(void)
{
unsigned char sccode,recode
P3=0x0f //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f) //有键按下
{
// delay(20) //延时去抖动
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef //逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0
return((~sccode)+(~recode))
}
else
sccode=(sccode<<1)|0x01
}
}
}
return 0 //无键按下,返回0
}
void getkey(void)
{
unsigned char key
key=kbscan()
if(key==0){keyval=0xffreturn}
switch(key)
{
case 0x11:keyval=7break
case 0x12:keyval=4break
case 0x14:keyval=1break
case 0x18:keyval=10break
case 0x21:keyval=8break
case 0x22:keyval=5break
case 0x24:keyval=2break
case 0x28:keyval=0break
case 漏扒0x41:keyval=9break
case 0x42:keyval=6break
case 0x44:keyval=3break
case 0x48:keyval=11break
case 0x81:keyval=12break
case 0x82:keyval=13break
case 0x84:keyval=14break
case 逗雀0x88:keyval=15break
default:keyval=0xffbreak
}
}
main()
{
TMOD=0x11
TH0=(65536-5000)/256
TL0=(65536-5000)%256
TR0=1
ET0=1
EA=1
while(1)
{
getkey()
if(keyval!=0xff)disk=keyval
delay(10)
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)