完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#define usi unsigned int //宏定义 #define usc unsigned char //宏定义 ***it duan=P2^6; ***it wei=P2^7; usc num,tt; usc code table[]={ //代码表(数组) 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 }; void delay(usi z) //延时函数 放在主函数前不用声明 有参数,不能忘括号里的变量类型与名称 { usi x,y; for(x=z;x>0;x--) //这里不能>= 这个错误坑了我几个小时!!! for(y=110;y>0;y--); //别再语句块分开的地方搞错了 是用分号不是逗号 诶~~~~~ } void main() { num=0; tt=0; TMOD=0x01; //设置定时器0为工作方式1 TH0=(65535-50000)/256; // "/"是求模运算 即能被几个整除 TL0=(65535-50000)%256; // "%"是求余运算 即整除后剩余 EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 也可以写成 TCON=0x01; wei=1; P0=0x00; //点亮所有数码管(共8位) wei=0; duan=1; P0=0x3f; //数码管显示1 duan=0; while(1) { if(tt==20) { tt=0; num++; if(num==16) num=0; duan=1; P0=table[num]; duan=0; //delay(1000); } } } void time0() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; tt++; } |
|
相关推荐
9个回答
|
|
你这主题没有电路图,也不知道你具体晒要实现什么,中断的话...
num=0; 你这一段程序是对定时器0的初值、工作方式以及可以中断进行设置,TH0和TL0时定时器0的初值,它决定了定时器0每一次从开始计数到溢出的所需时间,定时器/计数器工作在方式1时是16位2进制数模式,高8位和低8位总共有65536个计数次数,当计数达到65535时,即在下一个机械周期到来时定时器将会达到65536使之溢出,到时硬件将会把溢出标志位置1,向单片机发送中断请求,单片机响应中断后将会停止目前正在执行的程序,并留下一个断点,然后转向执行中断程序,中断程序执行结束后会返回断点继续执行之前停止的程序; void Time0() interrupt 1 你这一段就是中断程序,当定时器0溢出使单片机响应中断后,执行中断程序,中断程序意思:重置定时器0的初值,并将变量tt加1,然后退出中断; while(1) 主函数中有while语句,所以,单片机执行完开始时对定时器0的初值、工作方式,数码管显示等的设定后,就会一直停滞在whlie语句中等待if语句达到条件,当tt等于20,也就是定时器0中断20次后,将会执行if语句中的程序。 看后有不懂再问吧,先说这些
最佳答案
|
|
|
|
5块钱,包教会,支付宝到位交易支持
|
|
|
|
没有电路图,也不知道你这程序摇实现什么,中断的话...
TMOD=0x01; //设置定时器0为工作方式1 你这一段是对中断的工作方式、初值、是否允许中断等进行设置,而工作在模式1时,定时/计数器是16位的,TH0和TL0是定时器0的初值,决定定时器0的计时时间,定时器的计时是从初值开始,每一个机械周期往上+1,直至达到65535,下一机械周期到来时+1为65536,16位2进制数满,溢出,使定时器0的溢出标志位硬件置1,单片机停止当前程序,转向执行中断程序。 void Time0() interrupt 1 这一段是你的中断程序,内容为:单片机定时器溢出中断后,重置定时器初值,并将变量tt加1, while(1) 在你的主函数中,有着这个while语句,单片机执行完上面对定时器0的初值的设定和数码管显示后就一直在这个语句里等待tt等于20,当tt等于20时,将tt重置为0并将变量num加1. 这是利用定时器0和中断实现的计时。 |
|
|
|
....
|
|
|
|
|
|
|
|
先是对定时器0的初值、工作方式等的设定,当定时器0计数溢出时,单片机执行中断,中断程序内容:重置定时器0初值,并将变量tt加1。
这是第三次回复了,懒得再打那么详细了,免得再失败,如果还失败......我就不回了.... |
|
|
|
先是对定时器0的初值、工作方式等的设定,当定时器0计数溢出时,单片机执行中断,中断程序内容:重置定时器0初值,并将变量tt加1。
这是第三次回复了,懒得再打那么详细了,免得再失败,如果还失败......我就不回了.... |
|
|
|
|
|
|
|
谢谢你耐心的解答,目前这块知识已经理解。回复比较晚我很抱歉(话说论坛怎么没有回复提示...),再次感谢。如果有时间还请麻烦看看我这个帖子的问题(https://bbs.elecfans.com/forum.p ... =1112049&extra=)。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
418 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1083 浏览 0 评论
846 浏览 0 评论
886 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
882 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11832 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 23:40 , Processed in 0.734326 second(s), Total 88, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号