本来这篇文章是没有准备写的。
本来是想最终做个遥控解码器的,因为按键,接收头都是现成的,中九里面。
结果遇到了一些问题,干脆分门别类的一个个试吧。刚好把外部中断也学习了。
电路图见上篇。
像这种报错很多都是空间不够,芯片空间不够造成的。
不多说了,直接上代码吧。就主文件里的,因为分散到各个别的文件了,看起来东西就很少。
/******************************************************************** 日 期: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