当前位置:首页 > 《单片机的C语言程序设计与运用(第2版)》期末复习题及答案2
.
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};//代码表 void dl_ms()
//延时1ms函数
;
{ unsigned int j; for(j=0;j<200;j++) }
void display(void)//显示函数 { uchar segcode, bitcode, i; bitcode=0xfe; //位码赋初值 for(i=0;i<6;i++)
{ segcode=dis_buf[i];//显示缓冲器内容查表 P0=table[segcode]; P3=bitcode; dl_ms( ); P3=0xff;
//关闭显示
bitcode=bitcode<<1; //调整位码 bitcode=bitcode|0x01; } }
void main(void)
{ dis_buf[0]=1; dis_buf[1]=2; dis_buf[2]=3; dis_buf[3]=4; dis_buf[4]=5;dis_buf[5]=6; while(1) { display( ); } }
(2)定时调用
定时调用是通过定时器/计数器的定时功能来定时一定的时间(如20ms),定时时间到来调用显示函数。 void main(void) //定时调用 { TMOD=0x01;
TH0=-20000/256; TL0=-2000%6; EA=1;ET0=1; TR0=1;
dis_buf[0]=1;dis_buf[1]=2;dis_buf[2]=3;
可编辑
.
void time0_int( ) interrupt 1 {
TH0=-20000/256; TL0=-2000%6; display( ); }
dis_buf[3]=4;dis_buf[4]=5;dis_buf[5]=6; while(1) ; }
【例6-6】独立式按键示例
C51源程序如下: #include
#define uchar unsigned char #define uint unsigned int uchar data key2;
code uchar dirtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}; void dl_6( ) { uint i;
for(i=0;i<600;i++); }
void key( ) { uchar key1; P1=0xff; key1=P1;
可编辑
.
if(key1!=0xff)
{ dl_6( ); P1=0xff;key1=P1; if(key1!=0xff) { key1=P1; switch(key1)
{ case 0xff: key2=8; break; case 0xfe: key2=0; break; case 0xfd: key2=1; break; case 0xfb: key2=2; break; case 0xf7: key2=3; break; case 0xef: key2=4; break; case 0xdf: key2=5; break; case 0xbf: key2=6; break; case 0x7f: key2=7; break; default:break; } } } }
void main( ) { key2=8; while(1) { key( );
P3=dirtab[key2]; } }
【例6-7】 4×4矩阵键盘示例
可编辑
.
#include
#define uchar unsigned char #define uint unsigned int uchar data dir_buf;
code uchar dirtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
code uchar keytab[]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77}; void delay(void); void keyscan( ); void dir( ); uchar key; void main(void) { dir_buf=16; while(1)
{ keyscan( ); dir( ) ; } }
void dir( )
{ P2=dirtab[dir_buf];}
void delay(void)
可编辑
共分享92篇相关文档