当前位置:首页 > 单片机初学者实验指导书 - 图文
void main() {
EA = 1; TH0=0x00;
TL0=0x00; ET0=1;
ET1=1;
TMOD = 0x15;// 打开定时器和计数器
TH1=0x3C; //50ms
TL1=0xB0; TR0 = 1; TR1 = 1; while(1)
{
for(j=0;j<3;j++) //显示个数 {
P0=b[j]; P2=j; delaym(2); }
} }
timer3() interrupt 3 //中断 { TH1=0X3C; TL1=0XB0; i++;
if(i==20) //1s {
kop=TH0;//计数器计入脉冲 kop=kop<<8; kop=kop+TL0;
b[2]=a[kop/100]; b[1]=a[kop0/10]; b[0]=a[kop0]; i=0; TH0=0; TL0=0; } }
实验八:4X4矩阵键盘扫描实验
实验内容:正在撰写中 程序清单一: #include
unsigned char c[8];
unsigned char K,Key,fl,ac=0;
void delay(unsigned char pp) {
while(pp--)
{ unsigned char j; for(j = 0;j<123;j++); }
}
void display()
{ unsigned char i; for(i=0;i<8;i++)
{ P0=c[i]; P2=i; delay(2); }
//为了让8个数码管轮流亮一遍过去
char
b[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//延迟时间等于k*8ms
//j进行的内部循环,1次延迟8us,延迟1ms
}
unsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线 {
unsigned char rcode, ccode;
P1 = 0xF0; // 发全0行扫描码,列线输入 if((P1&0xF0) != 0xF0) // 若有键按下 {
delay(1);// 延时去抖动
if((P1&0xF0) != 0xF0)
{ rcode = 0xFE; // 逐行扫描初值 while((rcode&0x10) != 0)
{
P1 = rcode; // 输出行扫描码 if((P1&0xF0) != 0xF0) // 本行有键按下 {
ccode = (P1&0xF0)|0x0F;
//do{;} while((P1&0xF0) != 0xF0); //等待键释放 return ((~rcode) + (~ccode)); // 返回键编码 } else
rcode = (rcode<<1)|0x01; // 行扫描码左移一位 }
} }
return 0; // 无键按下,返回值为0 }
void KeyDeal(unsigned char Key) { //unsigned char n; if(Key!=0) {
switch(Key) {
case 0x11: K=0; break; case 0x21: K=1; break; case 0x41: K=2; break; case 0x81: K=3; break; case 0x12: K=4; break; case 0x22: K=5; break; case 0x42: K=6; break; case 0x82: K=7; break; case 0x14: K=8; break; case 0x24: K=9; break; case 0x44: K=10; break; case 0x84: K=11; break; case 0x18: K=12; break; case 0x28: K=13; break; case 0x48: K=14; break; case 0x88: K=15; break; default: break; }
c[7]=c[6]; c[6]=c[5]; c[5]=c[4]; c[4]=c[3]; c[3]=c[2]; c[2]=c[1]; c[1]=c[0];
c[0]=b[K];
} }
void main() {
while(1)
{
Key = Keycan();//键盘扫描获取一次按键的编码0x11-0x88 KeyDeal(Key);
display();
//对扫描到的键盘编码进行转换处理,变成数据键盘0-9,11-15
} }
实验清单二:0-9,三种功能键盘
#include
unsigned char b[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; unsigned char c[8];
unsigned char K,Key,fl=0,ac=0; //fl功能键标志,ac表示数码管显示个数
void delay(unsigned char pp) {
while(pp--) {
unsigned char j; // P2=P2&0XF8; for(j = 0;j<123;j++); } }
void display() { unsigned char i; for(i=0;i //延迟时间等于k*1ms //j进行的内部循环,1次延迟8us,延迟1ms { P0=c[i]; P2=i; delay(2);
共分享92篇相关文档