|
給你改了,對比一下就知道哪里錯了。
- #include <reg51.h>
- #include <intrins.h>
- /*******宏定義***********/
- #define uint unsigned int
- #define uchar unsigned char
- /******位定義************/
- sbit SH_CP=P3^1; /*移位寄存器時鐘輸入*/
- sbit ST_CP=P3^3; /*存儲寄存器時鐘輸入*/
- sbit DS=P3^2; /****串行數(shù)據(jù)輸入****/
- /******變量和數(shù)組*******/
- uint key;
- uint timecount;
- uchar cnta;
- uchar cntb;
- int key_scan(void);
- void delayms(uint m);
- uchar code key_num[8][8]={
- 0,1,2,3,4,5,6,7,
- 8,9,10,11,12,13,14,15,
- 16,17,18,19,20,21,22,23,
- 24,25,26,27,28,29,30,31,
- 32,33,34,35,36,37,38,39,
- 40,41,42,43,44,45,46,47,
- 48,49,50,51,52,53,54,55,
- 56,57,58,59,60,61,62,63,
- };//;// <--------------中文符號
- uchar code table[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar code digit_tab[10][8]={ /***字模 陽碼 逐列式 逆向 ***/
- {0xFF,0xC7,0xBB,0xBB,0xBB,0xBB,0xC7,0xFF}, /*"0",0*/
- {0xFF,0xB7,0xB7,0x83,0xBF,0xBF,0xFF,0xFF}, /*"1",1*/
- {0xFF,0xB7,0x9B,0x9B,0x9B,0xAB,0x93,0xFF}, /*"2",2*/
- {0xFF,0xD7,0xBB,0xB3,0xB3,0xAB,0xCB,0xFF}, /*"3",3*/
- {0xFF,0xEF,0xD7,0xDB,0x9B,0x81,0xFF,0xFF}, /*"4",4*/
- {0xFF,0xC3,0xAB,0xAB,0xAB,0xAB,0xDB,0xFF},/*"5",5*/
- {0xFF,0xC7,0xAB,0xAB,0xAB,0xAB,0xDF,0xFF},/*"6",6*/
- {0xFF,0xF3,0xFB,0x8B,0xEB,0xF3,0xFB,0xFF}, /*"7",7*/
- {0xFF,0xD3,0xAB,0xAB,0xAB,0xAB,0xD3,0xFF},/*"8",8*/
- {0xFF,0xF7,0xAB,0xAB,0xAB,0x8B,0xC7,0xFF}, /*"9",9*/
- // {0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00},/*"0",0*/
- // {0x00,0x48,0x48,0x7C,0x40,0x40,0x00,0x00},/*"1",1*/
- // {0x00,0x48,0x64,0x64,0x64,0x54,0x6C,0x00},/*"2",2*/
- // {0x00,0x28,0x44,0x4C,0x4C,0x54,0x34,0x00},/*"3",3*/
- // {0x00,0x10,0x28,0x24,0x64,0x7E,0x00,0x00},/*"4",4*/
- // {0x00,0x3C,0x54,0x54,0x54,0x54,0x24,0x00},/*"5",5*/
- // {0x00,0x38,0x54,0x54,0x54,0x54,0x20,0x00},/*"6",6*/
- // {0x00,0x0C,0x04,0x74,0x14,0x0C,0x04,0x00},/*"7",7*/
- // {0x00,0x2C,0x54,0x54,0x54,0x54,0x2C,0x00},/*"8",8*/
- // {0x00,0x08,0x54,0x54,0x54,0x74,0x38,0x00},/*"9",9*/
- };
- /**************函數(shù)定義***********************/
- /*********************************************/
- /*******函數(shù)名稱:Ser_IN**********************/
- /*******函數(shù)描述:串行數(shù)據(jù)輸入****************/
- /*******輸入?yún)?shù):Data************************/
- /*******返回值 : 無**************************/
- /*********************************************/
- void Ser_IN(uchar Data)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- SH_CP=0;//;//<-----------------中文符號
- DS=Data&0x08;
- Data<<=1;
- SH_CP=1;
- _nop_();
- }
- }
- /*********************************************/
- /*******函數(shù)名稱:Par_OUT********************/
- /*******函數(shù)描述:并行數(shù)據(jù)輸出****************/
- /*******輸入?yún)?shù):無**************************/
- /*******返回值 : 無**************************/
- /*********************************************/
- void Par_OUT()
- {
- ST_CP=1;
- _nop_( );
- _nop_( );
- ST_CP=0;
- }
- /*********************************************/
- /*******函數(shù)名稱:Timer0**********************/
- /*******函數(shù)描述:T0中斷函數(shù)******************/
- /*******輸入?yún)?shù):無**************************/
- /*******返回值 : 無**************************/
- /*********************************************/
- void Timer0(void) interrupt 1 using 0 //<--------這里不對
- {
- TH0=(65536-1000)/256; //12MHZ晶振定時時間為1ms
- TL0=(65536-1000)%256;
- Ser_IN(table[cntb]); //列掃描//
- Ser_IN(digit_tab[cntb][cnta]); //串行數(shù)據(jù)輸入//
- Par_OUT(); //并行數(shù)據(jù)輸出
- cnta++;
- if(cnta==8)
- {
- cnta=0;
- } ;
-
- timecount++;
- if(timecount==1000)
- {
- timecount=0;
- cntb ++;
- if(cntb==10)
- {
- cntb=0;
- }
- }
- key=key_scan();
- if(key!=-1)
- {
- switch(key)
- { //<-------這里少了
- case 0:cntb=0;break;
- case 1:cntb=1;break;
- case 2:cntb=2;break;
- case 3:cntb=3;break;
- case 4:cntb=4;break;
- case 5:cntb=5;break;
- case 6:cntb=6;break;
- case 7:cntb=7;break;
- case 8:cntb=8;break;
- case 9:cntb=9;break;
- case 10:cntb=10;break;
- }
- }
- } //<--------這里少了
- /*********************************************/
- /*******函數(shù)名稱:key_scan*********************/
- /*******函數(shù)描述:鍵盤掃描********************/
- /*******輸入?yún)?shù):無**************************/
- /*******返回值 : 鍵值************************/
- /*********************************************/
- int key_scan()
- {
- uint i,j;
- for(i=0;i<8;i++)
- {
- P0=table[i];
- if(P2!=0xff)
- {
- delayms(2);
- if(P2!=0xff)
- {
- for(j=0;j<8;j++)
- {
- if(P2==table[j])
- return key_num[i][j];
- }
- }
- }
- else
- return -1;
- }
- return -1; //<---------要加這個
- }
- /*********************************************/
- /*******函數(shù)名稱:delayms**********************/
- /*******函數(shù)描述:延時函數(shù)********************/
- /*******輸入?yún)?shù):uint m***********************/
- /*******返回值 :無***************************/
- /*********************************************/
- void delayms(uint m) //; <------------不用加
- {
- uint i,j;
- for(i=0;i<m;i++)
- for(j=0;j<125;j++);
- }
- /*********************************************/
- /*******函數(shù)名稱:main************************/
- /*******函數(shù)描述:主函數(shù)**********************/
- /*******輸入?yún)?shù):無**************************/
- /*******返回值 :無***************************/
- /*********************************************/
- void main()
- {
- TMOD=0x01;
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- ;
- }
- }
復(fù)制代碼 |
|