我有2個問題,第一個問題:stc15w4k58s4單片機芯片定時器掃描4x4鍵盤的問題,代碼如下:
但是為什么我只能掃描到 a,b,c,d 四個按鍵? 按其他按鍵都被識別為a,b,c,d!
第二個問題:晶振我都設置為11.0592MHZ了,和stc89c52使用一樣的晶振,但是stc-isp生成兩款芯片的軟件延時和定時器初值不一樣。這兩個不是根據(jù)晶振頻率來設置的嗎?既然都是11.0592MHZ了,為什么不一樣呢?
謝謝大佬指點!初學菜雞感激不盡。
- #ifndef __KEY_H__
- #define __KEY_H__
- #include <stc15.h>
- sbit Row_1=P1^7;
- sbit Row_2=P1^6;
- sbit Row_3=P1^5;
- sbit Row_4=P1^4;
- sbit Column_1=P1^3;
- sbit Column_2=P1^2;
- sbit Column_3=P1^1;
- sbit Column_4=P1^0;
- void Key_Init(void);
- unsigned char Key_GetState(void);
- void Key_Scan(void);
- #endif
復制代碼- #include <stc15.h>
- #include "key.h"
- void Timer0_Init(void) //1毫秒@11.0592MHz
- {
- AUXR &= 0x7F; //定時器時鐘12T模式
- TMOD &= 0xF0; //設置定時器模式
- TMOD |= 0x01; //設置定時器模式
- TL0 = 0x66; //設置定時初始值
- TH0 = 0xFC; //設置定時初始值
- TF0 = 0; //清除TF0標志
- TR0 = 1; //定時器0開始計時
- PT0 = 0; //中斷優(yōu)先級
- ET0 = 1; //定時器0中斷允許
- EA = 1; //總中斷允許
- }
- void Timer0_ISR(void) interrupt 1
- {
- static unsigned int T0_Count=0;
- TL0=0x66;
- TH0=0xFC;
- T0_Count++;
- if(T0_Count>=20)
- {
- T0_Count=0;
- Key_Scan();
- }
- }
復制代碼- #ifndef __TIMER_H__
- #define __TIMER_H__
- void Timer0_Init(void);
- #endif
復制代碼- #include <stc15.h>
- #include "timer0.h"
- #include "key.h"
- void main(void)
- {
- extern unsigned char Key_Flag;
- P0M0=0X00;
- P0M1=0X00;
- P1M0=0X00;
- P1M1=0X00;
- P2M0=0X00;
- P2M1=0X00;
- P3M0=0X00;
- P3M1=0X00;
- Timer0_Init();
- while(1)
- {
- if(Key_Flag=='0')
- .....
- if(Key_Flag=='1')
- .....
- }
復制代碼
|