标题:
stc15单片机按键循环显示源码
[打印本页]
作者:
王wincc
时间:
2018-3-29 17:05
标题:
stc15单片机按键循环显示源码
单片机源程序如下:
#include<stc15f2k60s2.h>
#define uchar unsigned char
#define uint unsigned int
uint i;
uint ss_data=0;
uint SS=0;
uchar num=0;
uchar code tab[]={0xc0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};//ROM
void delayms(int ms);
void keyscan16();
void Timer0Init(void);
void main()
{
Timer0Init();
EA=1;
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //板子初始化程序 ,以后讲
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF; //数码管初始化程序,以后讲
P0=tab[0];
while(1)
{
keyscan16();
}
}
void keyscan16()
{
uchar temp;
P44=0;P42=1;P3=0X7F;
temp=P3;
temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
if(temp!=0x0f)
{
delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0x0f)
{
temp=P3;
ET0=1;
switch(temp)
{
case 0x7e: ss_data=800;break;
case 0x7d: ss_data=400;break;
case 0x7b: ss_data=200;break;
case 0x77: ss_data=100;break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0X0F;
}
}
}
P44=1;P42=0;P3=0XBF;//1011 111
temp=P3;
temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
if(temp!=0x0f)
{
delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xBe: P0=tab[0];break;//1111 1110 P37----p30
case 0xBd: P0=tab[5];break;//1111 1101
case 0xBb: P0=tab[6];break;
case 0xB7: P0=tab[7];break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0X0F;
}
}
}
P3=0XDF;P44=1;P42=1;//1101 1111
temp=P3;
temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
if(temp!=0x0f)
{
delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xDe: P0=tab[8];break;//1111 1110 P37----p30
case 0xDd: P0=tab[9];break;//1111 1101
case 0xDb: P0=tab[10];break;
case 0xD7: P0=tab[11];break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0X0F;
}
}
}
P3=0XEF;P44=1;P42=1;//1101 1111
temp=P3;
temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
if(temp!=0x0f)
{
delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xEe: P0=tab[0];break;//1111 1110 P37----p30
case 0xEd: P0=tab[2];break;//1111 1101
case 0xEb: P0=tab[4];break;
case 0xE7: P0=tab[6];break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0X0F;
}
}
}
}
void Timer0Init(void) //5毫秒@11.0592MHz
{
// AUXR |= 0x80; //定时器时钟1T模式 AUXR =AUXR|0x80; 0010 1010 | 1000 0000 = 1010 1010
// TMOD &= 0xF0; //设置定时器模式 // TMOD = TMOD&0xF0; 1010 1010 & 1111 0000 = 1010 0000
AUXR=0X80;
TMOD=0XF0;//11.0592MHz 55296 5MS 65536-55296=10240
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void time0(void) interrupt 1
{
SS=SS+1;
if(SS==ss_data)
{
SS=0;
P0=tab[num];
num++;
if(num==16)num=0;
}
}
void delayms(int ms)
{
int i,j;
for(i=ms;i>0;i--)
for(j=845;j>0;j--);
}
复制代码
作者:
wxxl
时间:
2018-3-29 22:06
学习了,谢谢!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1