sbit PB1=P2^0; sbit PB2=P2^1; main() { unsigned char i=0; PB1=PB2=1; while(1) { SEG=TAB[i]; if(PB1==0) { debouncer(); if(PB1==0) { debouncer(); i=(i<9)?i+1:0; }
if(PB@==0) { debouncer(); i=(i>0)?i-1:9; } } } }
void debouncer(void) { int i; for(i=0;i<2400;i++); }
2. #include \sbit speaker=P0^0 ; unsigned char keys;
unsigned char tone[]={108,102,91,86,77,68,61,57}; void delay8us(unsigned char x) {
unsigned char i,j; for(i=0;i void sound (unsigned char x) { char i; for(i=0;i<60;i++) { speaker=1; delay8us(tone[x]); speaker=0; delay8us(tone[x]); } } main() { P2=0xff; while(1) { keys=~P2; switch (keys) { case 0x01: sound(0);break; case 0x02: sound(1);break; case 0x04: sound(2);break; case 0x08: sound(3);break; case 0x10: sound(4);break; case 0x20: sound(5);break; case 0x40: sound(6);break; case 0x80: sound(7);break; } } } 3. #include \sbit output=P0^0 ; sbit s1=P2^0; sbit s2=P2^1; sbit s3=P2^2; sbit s4=P2^3; sbit s5=P2^4; sbit s6=P2^5; sbit s7=P2^6; sbit s8=P2^7; unsigned int count=0; #define TH_M1(65536-count)/256 #define TL_M1(65536-count)%6 main() { IE=0x82; TMOD=0X01; output=1; P2=0xff; while(1) { if(s1==0) count=5; else if(s2==0) count=10; else if(s3==0) count=50; else if(s4==0) count=100; else if(s5==0) count=500; else if(s6==0) count=1000; else if(s7==0) count=5000; else if(s8==0) count=10000; TH0=TH_M1; TL0=TL_M1; TR0=1; while(TF0==0); TF0=0; output=~output; } } 第12章 填空题 1. 双键互锁方式和N键巡回方式 2.动态 静态 3.直插式 贴片式 4. 中断方式 5. 段控信号 位控信号 选择题 1.b 2.c 3.AB 4.B 5 B 上机题 1. #include %unsigned char TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; char disp[2][4]={{2 0 0 8},{0 3 1 5}}; void delay1ms(int); code void scanner(char); main() { char i; while(1) { for(i=0;i<2;i++) { scanner(i); P1=0xff; delay1ms(480); } } } void delay1ms(int x) { int i,j; for(i=0;i for(j=1;j<=120;j++); } void scanner(char x) { char i,j,BCD,scan; for(i=0;i<30;i++) { scan=0xf7; for(j=0;j<4;j++) { p2=0xff; P1=scan; BCD=disp[x][j]; P2=TAB[BCD]; delay1ms(4); scan>>=1; } } } 2. #include \#define SEG P2 #define SCANP P1 sbit LED=P0^&; #define count_M1 50000 #define TH_M1 (65536-COUNT_M1)/256 #define TH_M1 (65536-COUNT_M1)%6 int count_T0=0; #define count_M2 250 #define TH_M2 (256-count_M2) unsigned char code TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; char disp[2]={0xc0,0xc0}; char seconds=0; char scan=0; main() { IE=0X8A; TMOD=0X21; TH0=TH_M1;TL0=TL_M1; TR0=1; TH1=TH_M2;TL0=TL_M2; TR1=1; LED=1; while(1); } void T0 1s(void) interrupt 1 { TH0=TH_M1;TL0=TL_M1; if(++count_T0==20) { count_T0=0; seconds++; if(++count_T0==20) { count_T0=0; seconds++; if(seconds==60) { seconds=0; LED=~LED; } } disp[1]=TAB[second/10]; disp[0]=TAB[second]; } }