c51单片机程序实例

c51单片机程序实例

近期c51单片机程序实例成为网络焦点,我们通过专业视角对相关信息进行了梳理 ,期待这些内容能为您排忧解难。

#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=0;i<a;i++)

for(j=0;j<1000;j++);

}

void?t0isr()?interrupt?1

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

switch(num)

{

case?0:P2=0x01;break;

case?1:P2=0x02;break;

case?2:P2=0x04;break;

case?3:P2=0x08;break;

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=0xff;return;}

switch(key)

{

case?0x11:keyval=7;break;

case?0x12:keyval=4;break;

case?0x14:keyval=1;break;

case?0x18:keyval=10;break;

case?0x21:keyval=8;break;

case?0x22:keyval=5;break;

case?0x24:keyval=2;break;

case?0x28:keyval=0;break;

case?0x41:keyval=9;break;

case?0x42:keyval=6;break;

case?0x44:keyval=3;break;

case?0x48:keyval=11;break;

case?0x81:keyval=12;break;

case?0x82:keyval=13;break;

case?0x84:keyval=14;break;

case?0x88:keyval=15;break;

default:keyval=0xff;break;

}

}

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);

}

}

本文已完整呈现c51单片机程序实例的核心内容解析,若这些分析对您的工作或学习有所助益 ,建议您将本站加入书签以便后续查阅 。


来源:http://luzgz.org.cn/news-rog/7.html
©版权声明
THE END