1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、在STC89C52实验平台的4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容。2、当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。 这是要求,其中p0端口输出段码,p1端口中输出位选信号。 四个数码管共阳极连接。请问如何编写代码?刚学到中断章节,对此有疑惑,请大牛们解答下,希望有些注解。非常感谢!
|
|
相关推荐
8个回答
|
|
希望各位教下我,第一次在此论坛发帖求助,希望能学好单片机
|
|
|
|
代码就不帮你写了,我就说一下细路。具体怎么实现还得靠你自己。
首先设置一个数组Num[4];分别保存四个要显示的数。 主函数就是讲Num[4]里面的数不断扫描显示。这个我想你应该会。 主函数里面还得初始化定时器0和定时器1,定时器1设置为蜂鸣器的频率对应的时间。 设置定时器0定时时间2s,定时器不能直接设置2s的必须计算多次中断实现。 定时器0中断里面就改变Num[4]里面的数,每个元素加1,如果元素值大于10则置零。同时判断Num[4]里面时候有1,如果有1开启定时器1,否则关闭定时器0. 思路就这样,不懂再上来问。 |
|
|
|
我编写的代码,麻烦看下。但在proteul上仿真时,不知道是参数设置不对的原因,还是代码的原因,出现乱码。那个蜂鸣器的我没有实现。麻烦帮忙看下,我纠结了好久的一道题目。 #include unsigned char i; //记录中断次数 unsigned int x; //x%10为千位的数字 unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管显示0~9的段码表 /*********************************************************************** 函数功能:快速动态扫描延时,延时约0.9毫秒 ************************************************************************/ void delay(void) { unsigned int i; for(i=0;i<300;i++) ; } /*********************************************************************** 函数功能:4位数的数码显示器显示 ***********************************************************************/ void display(unsigned int k) { P1=0xfe;//即P1=1111 1110B,P1.0引脚输出低电平,数码显示器千位接通电源 P0=Tab[k%10];//显示千位 delay(); P1=0xfd;//即P1=1111 1101B,P1.1引脚输出低电平,数码显示器百位位接通电源 P0=Tab[(k+1)%10];//显示百位 delay(); P1=0xff; P1=0xfb;//即P1=1111 1011B,P1.2引脚输出低电平,数码显示器十位接通电源 P0=Tab[(k+2)%10];//显示十位 delay(); P1=0xff; P1=0xf7;//即P1=1111 0111B ,P1.3引脚输出低电平,数码显示器个位接通电源 P0=Tab[(k+3)%10];//显示个位 delay(); P1=0xff; } void main(void)//主函数 { i=0; x=0; TMOD=0x01;//使用定时器T0 TH0=(65536-46083)/256;//将定时器计时时间设定为46083×1.085微秒=50000微秒=50毫秒 TL0=(65536-46083)%256; EA=1;//开启总中断 ET0=1;//定时器T0中断允许 TR0=1;//启动定时器T0开始运行 while(1) { display(x); //调用检测结果的显示程序 } } /******************************************************** 函数功能:定时器T0的中断服务程序 *******************************************************/ void Time0(void) interrupt 1 using 1 { TR0=0; //关闭定时器T0 i++; //每来一次中断,i自加1 if(i==40) //够40次中断,即2秒钟进行一次检测结果采样 { x++; i=0; //将i清0,重新统计中断次数 } TH0=(65536-46083)/256; //重新给计数器T0赋初值 TL0=(65536-46083)%256; TR0=1; //启动定时器T0 } proteul的图像在附件里。我想请教一下,proteul里面是否也要设置参数的,我一直以为它们只是逻辑器件,不需要设置参数。 |
|
|
|
哈哈,编写完毕,运行通过了,谢谢指教。那个proteul的图,某些参数我没设置对,弄了一个晚上,总之很感谢你啦。 |
|
|
|
我看电影还没有空回你,你就弄出来了,还是不错的嘛…… |
|
|
|
我想了解一下proteus图里面的具体参数如何设置,我按照上图画的图,但是数码管只能动态显示一个
|
|
|
|
不错的文档,值得收藏
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11990 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 15:00 , Processed in 0.965965 second(s), Total 86, Slave 68 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号