完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
整个程序的框架、功能(实现不同按键控制不同的功能并且在数码管上显示功能号“0001~0004”)我都看懂了。但是对于中断服务程序1(红色部分)对整个系统来说有什么意义,我始终不明白。求大神指教~! PS :为了简化已经删去部分函数的内容,。
/*******头文件*********/ #include"reg51.h" #include"absacc.h" /*****数码管断码*******/ unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07}; /*****全局变量*********/ int keyval; /*****端口定义****/ sfr key=0XB0; ***it S4=P3^5; ***it S3=P3^4; ***it S2=P3^3; ***it S1=P3^2; ***it SPEAKER =P2^4; ***it RELAY=P2^6; /************按键消抖延时******/ void delay(void) { } /************数码管显示********/ void display(int k) { P0=tab[k/1000]; P2=0Xfe; delay(); P0=tab[k%1000/100]; P2=0xfd; delay(); P0=tab[k%100/10]; P2=0xfb; delay(); P0=tab[k%10]; P2=0xf7; delay(); P2=0xff; } /***********LED闪动延时********/ void leddelay() { } /***********LED闪动*****/ void ledflash() { } /*********led流水灯******/ void ledflow(void) { } /*********继电器吸合**********/ void relayon(void) { } /********主程序**************/ void main(void) { keyval=0; key=0xff; P2=0xff; P0=0xff; /*******定时器初始化*****/ EA=1; ET0=1; ET1=1; TMOD=0X11; TH0=-10000/256; TL0=-10000%256; TH1=-100/256; TL1=-100%256; TR0=1; TR1=1; while(1) { display(keyval); if(keyval==1) ledflash(); if(keyval==2) ledflow(); if(keyval==3) relayon(); if(keyval==4) ledflash(); display(keyval); } } /*********中断服务程序1**********/ void intsrv1(void) interrupt 1 using 1 { TR0=0; display(keyval); TH0=-10000/256; TL0=-10000%256; TR0=1; } void intserv3(void) interrupt 3 using 3 { TR1=0; if((key&0x3c)!=0x3c) delay(); if((key&0x3c)!=0x3c) { if(S1==0) keyval=1; if(S2==0) keyval=2; if(S3==0) keyval=3; if(S4==0) keyval=4; } TH1=-100/256; TL1=-100%256; TR1=1; } |
|
相关推荐
13个回答
|
|
|
|
|
|
稳定数码管显示
|
|
|
|
|
|
|
|
void intsrv1(void) interrupt 1 using 1
{ TR0=0; //关定时计数 display(keyval); //调用显示函数 TH0=-10000/256;//重装初值 TL0=-10000%256; TR0=1; //开定时计数 } |
|
|
|
确实少了它以后 数码管显示就乱了。。。可是我不知道原理是什么?,为什么写在中断程序里面? 而写只写在外部中断里? |
|
|
|
写谢谢你回答··· 这个每行的意思我都知道了。。但是我不懂这整个中断函数对于整个系统来说的意义。。。以及工作原理·· |
|
|
|
你要好好复习下数码管动态扫描的原理 |
|
|
|
|
|
|
|
|
|
|
|
数码管要想一直显示,需要不停的扫描,你在主函数while(1)语句里,有好几个子函数,执行这些子函数时,对显示子函数display(),是不执行的,所以数码管显示不正常,在定时中断里加入显示子函数,可以让单片机在执行那些子函数时,对显示子函数也定时执行,数码管显示就正常了。
|
|
|
|
|
|
|
|
谢谢· 这回真懂了~! |
|
|
|
学习啦
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11770 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 16:52 , Processed in 0.666422 second(s), Total 63, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号