外中断0接一按键,模拟检测上层乘客。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit P2_0=P2^0
sbit P2_1=P2^1
uchar a=16,time
bit flag0,flag1
uchar code tab[ ]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
}
void delay_ms(uint ms)
{
uchar i
while(ms--)
for(i=0i<123i++)
}
void INTinit()
{
TMOD=0x01
EA=1
EX0=1
IT0=1
ET0=1
TR0=1
TH0=0x3c
TL0=0xb0
}
void disp()
{
P0=tab[a/10]
P2_0=0
delay_ms(3)
P2_0=1
P0=tab[a%10]
P2_1=0
delay_ms(3)
P2_1=1
}
void main()
{
INTinit()
while(1)
{
if(a>4)
flag0=1
else
flag0=0
if(!flag0)
disp()
else
{
if(flag1)
disp()
}
}
}
void EX0INT() interrupt 0
{
a--
if(a==0)
EA=0
}
void T0INT() interrupt 1
{
TH0=0x3c
TL0=0xb0
time++
if(time==5)
{
time=0
flag1=!flag1
}
}
这个就两个功能,一个是键盘扫描,二是数码管显示,这样的程序网上一大把,按键程序
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar pre_peyno=16keyno=16
void delayms(int x)
{
uchar i
while(x--)
{
for(i=0i<120i++)
}
}
void ked_scan()
{
uchar m
P2=0x0f
if(P2&0x0f!=0x0f)
delayms(2)
if(P2&0x0f!=0x0f)
m=P2^0x0f
switch(m)
{
case1:keyno=0break
case2:keyno=1break
case4:keyno=2break
case8:keyno=3break
default:keyno=16
}
P2=0xf0
delayms(1)
m=P2>>4^0x0f
m=m+10
switch(m)
{
case1:keyno=0break
case2:keyno=4break
case4:keyno=8break
case8:keyno=12break
}
}
main()
{
P2=0xff
while(1)
{
uchar i
switch(keyno)
{
case0:P2=0x00break
case1:P2=0xfefor(i=0i<7i++){P2=_crol_(P2,1)delayms(150)}break
case2:P2=0x7ffor(i=0i<7i++)P2=_cror_(p2,1)delayms(150)}break
case16:P2=0xffbreak
}
}
数码管程序
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^7
sbit wela=P2^6
unsigned char code num[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}
#define uint unsigned int
void delay(uint x)
{
while(x--)
}
void main()
{
while(1)
{
P0=0xfe
wela=1
wela=0
P0=num[1]
dula=1
dula=0
delay(1000)
P0=0xfd
wela=1
wela=0
P0=num[2]
dula=1
dula=0
delay(1000)
}
}
以上两个程序是参考程序,不过还得根据自己的实际电路改改,不能直接运用。
调整显示常数表:共阴极显示:3F 06 5B 4F 66 6D 7D 07 7F 6F 77 7C 39 5E 79 71
0 1 2 3 4 5 6 7 8 9 A b C d E F
共阳极显示:C0 F9 A4 B0 99 92 82 F8 80 90 88 83 C6 A1 86 8E
0 1 2 3 4 5 6 7 8 9 A b C d E F
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)