我有2个问题,第一个问题:stc15w4k58s4单片机芯片定时器扫描4x4键盘的问题,代码如下:
但是为什么我只能扫描到 a,b,c,d 四个按键? 按其他按键都被识别为a,b,c,d!
第二个问题:晶振我都设置为11.0592MHZ了,和stc89c52使用一样的晶振,但是stc-isp生成两款芯片的软件延时和定时器初值不一样。这两个不是根据晶振频率来设置的吗?既然都是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; //中断优先级
- 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')
- .....
- }
复制代码
|