oh_耗子
获得 126 次赞
帮助过332人
tmd = 11095200 / 12tmd = (tmd * 2ms) / 1000tmd = 65532 - tmd在计算中,为什么要让频率乘以时间在除以1000
#include<reg51.h>sbit keyout1 = P2^7;sbit keyout2 = P2^6;sbit keyout3 = P2^5;sbit keyout4 = P2^4;sbit keyin1 = P2^3;sbit keyin2 = P2^2;sbit keyin3 = P2^1;sbit keyin4 = P2^0;unsigned char code LED[] = {0xfc 0x60 0xda 0xf2 0x66 0xb9 0xbe 0xe0 0xfe 0xf6 0xee 0xfe 0x9c 0xfc 0x9e 0x8E};unsigned char code keymap[4][4] = {{ 0x31 0x32 0x33 0x26 } //Êý×Ö¼ü1¡¢Êý×Ö¼ü2¡¢Êý×Ö¼ü3¡¢ÏòÉϼü { 0x34 0x35 0x36 0x25 } //Êý×Ö¼ü4¡¢Êý×Ö¼ü5¡¢Êý×Ö¼ü6¡¢Ïò×ó¼ü { 0x37 0x38 0x39 0x28 } //Êý×Ö¼ü7¡¢Êý×Ö¼ü8¡¢Êý×Ö¼ü9¡¢Ïòϼü { 0x30 0x1B 0x0D 0x27 } //Êý×Ö¼ü0¡¢ESC¼ü¡¢ »Ø³µ¼ü¡¢ ÏòÓÒ¼ü };unsigned char keysta[4][4] = {{1111}{1111}{1111}{1111}};unsigned char Ledbuf[] = {0x00 0x00 0x00 0x00 0x000x000x000x00}; //ÊýÂë¹Ü¿ª¹ØÏû³ý¹íÓ°void ShowNumber(unsigned long num);void keyaction(unsigned char keycode);void keydriver();void keyscan();void ledscan();int main(){ TMOD &= 0XF0; TMOD |= 0X01; TH0 = 0XFC; TL0 = 0X18; EA = 1; ET0 = 1; TR0 = 1; Ledbuf[0] = LED[0]; while(1) { keydriver(); }}void ShowNumber(unsigned long num){ signed int a; unsigned char buf[8]; for(a = 0; a < 8; a++) { buf[a] = num % 10; num = num / 10; } for(a = 8; a >= 1; a--) { if(buf[a] == 0) { Ledbuf[a] = 0x00; } else { break; } for(; a >= 0; a--) { Ledbuf [a]= LED[buf[a]]; } }}void keyaction(unsigned char keycode){ static unsigned char add; static unsigned char result; if((keycode >= 0x30) && (keycode <= 0x39)) { add = (add * 10) + (keycode - 0x30); //°Ñ¼üÅÌÂë±ä³É ShowNumber(add); } else if(keycode == 0x26) { result += add; add = 0; ShowNumber(result); } else if(keycode == 0x0d) { result += add; add = 0; ShowNumber(result); } else if(keycode == 0x1d) { result =0; add = 0; ShowNumber(add); }}void keydriver(){ unsigned char j i; unsigned char backup[4][4] = {{1111}{1111}{1111}{1111}}; for(i = 0; i < 4; i++) for(j = 0; j < 4; j++) { if(keysta[i][j] != backup[i][j]) { if(backup == 0) { keyaction(keymap[i][j]); } backup[i][j] = keysta[i][j]; } //backup[i][j] = keysta[i][j]; }}void keyscan(){ unsigned char i; unsigned char keyout = 0; static unsigned char keybuf[4][4] = {{0xff 0xff 0xff 0xff} {0xff 0xff 0xff 0xff} {0xff 0xff 0xff 0xff} {0xff 0xff 0xff 0xff} }; //¾ØÕó°´¼üɨÃ軺³å //½«Ò»ÐÐËĸö°´¼üÖµÒÆÈ뻺³åÇø£¬Íê³ÉÏû¶¶ keybuf[keyout][0] = (keybuf[keyout][0] << 1) | keyin1; keybuf[keyout][1] = (keybuf[keyout][1] << 1) | keyin2; keybuf[keyout][2] = (keybuf[keyout][2] << 1) | keyin3; keybuf[keyout][3] = (keybuf[keyout][3] << 1) | keyin4; for(i = 0; i < 4; i++) //ÿÐÐËĸö°´¼üËùÒÔÑ»·ËÄ´Î { if((keybuf[keyout][i] & 0x0f) == 0x00) //Á¬ÐøËÄ´ÎɨÃèÖµ¶¼ÊÇÁ㣬ËùÒÔ°´Ï { keysta[keyout][i] = 0; } else if((keybuf[keyout][i] & 0x0f) == 0x0f) { keysta[keyout][i] = 1; } } keyout++; //ÏÂÒ»ÐÐɨÃè keyout &= 0x03; // ÖØпªÊ¼Ò»´ÎɨÃè switch(keyout) { case 0: keyout4 = 1; keyout1 = 0; break; case 1: keyout1 = 1; keyout2 = 0; break; case 2: keyout2 = 1; keyout3 = 0; break; case 3: keyout3 = 1; keyout4 = 0; break; default: break; }}void ledscan(){ static unsigned char i = 0; P0 = 0x00; //ÏûÒþ //P1 = (P1 & 0XF0) | i; P1 = 0XF0; P0 = Ledbuf[i]; if(i < 8) { i++; } else { i = 0; }}void InterruptTimer0() interrupt 1 //½øÈëÖжÏ1ms£¬Íê³É¼üÅ̵ÄɨÃèºÍÊýÂë¹ÜÏÔʾ{ TH0 = 0XFC; TL0 = 0X18; keyscan(); ledscan();}为什么C51和C52执行上面的程序是两种结果