本来这篇文章是没有准备写的。
本来是想最终做个遥控解码器的,因为按键,接收头都是现成的,中九里面。
结果遇到了一些问题,干脆分门别类的一个个试吧。刚好把外部中断也学习了。
电路图见上篇。
像这种报错很多都是空间不够,芯片空间不够造成的。
不多说了,直接上代码吧。就主文件里的,因为分散到各个别的文件了,看起来东西就很少。
/********************************************************************
日 期:2022/05/28
功 能: 读取点亮由FD650Bic驱动的电子屏的按键码显示到屏上,这里用到了模块化开发 芯片型号STC15F104W
编 写:劲松电脑通讯 www.jvbaopeng.com
*/
#include <fd650.h>
MS_U8 G_num = 0; //全局数字
MS_U8 readint = 0;
void read650KEY(void){
int num ;
num = MDrv_FD650_Read();
if(num!=0){
G_num = num;
readint = 0;
}
}
void ET_0() interrupt 1 using 1 //定时器0中断
{
readint++; //没事瞎玩,让扫描按键和屏显示省资源
}
void EX_0() interrupt 0 //外部中断0,按键按了就中断下
{
LED1 = ~LED1; //简单的灯开关
G_num++;
}
void ET0_init() //定时器0中断初始化
{
TMOD=0x02; //定时器0工作在方式2
TH0=0x00; //重载值
TL0=0x00; //初始值
ET0=1; //开启定时器0中断
TR0=1;
}
void EX0_init() //外部中断0初始化
{
IT0=1; //设置外部中断0为下降沿触发
EX0=1; //开启外部中断0
EA=1; //开启总中断
}
void main()
{
int mm = 0;
MDrv_FrontPnl_Update((MS_U8*)" OFF",0); //来个初始显示,可以直接显示字符串的,传入文本指针
ET0_init();
EX0_init();
LED1 = 0;
while(1)
{
if(readint>50){ //这样隔断时间扫描下按键是不是相对省资源点
read650KEY();
MDrv_FrontPnl_Update(mystring(G_num), 0);
readint = 0;
}
}
}
开源了,代码见 https://gitee.com/jvbaopen/stc_demo