完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
设计单片机的Proteus仿真电路,实现如下功能:
P1口控制8个发光二极管,P0连接数码管 利用定时器/计数器T0产生定时,采用中断方式,让8个发光二极管每隔1s依次点亮,全亮后全灭,再次开始循环 数码管从1开始,每点亮一个发光二极管,显示+1,显示9时二极管全灭,再次开始循环 系统的晶振频率 f o s c = 12 M H z f_{osc}=12MHz fosc=12MHz,用Proteus仿真验证如下连续矩形脉冲 实验电路图 实验分析 八个发光二极管每隔1s依次点亮,同时数码管从1显示到8,9时全灭,然后不断循环。采用定时器0中断,事先写好依次点亮时的八种状态,然后每隔一秒P1变换到下一个状态。 高电平40ms,低电平360ms,采用定时器1中断,每次定时40ms,40ms时由高电平到低电平,400ms时候翻转即可。 源程序 #include《reg52.h》#include《intrins.h》#define uint unsigned int#define uchar unsigned char uchar t = 0, cnt = 1, n;***it wave = P2^7;bit flag;uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0-9uchar code LED_CODE[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; //依次点亮void init_time0() { P1 = LED_CODE[cnt - 1]; P0 = DSY_CODE[cnt]; TMOD = 0x01; //设置T0为定时器模式,工作方式在1 EA = 1; ET0 = 1; TR0 = 1;}void init_time1() { TMOD = 0x11; EA = 1; ET1 = 1; TR1 = 1; wave = 1; //高电平 flag = 1;}void time0() interrupt 1 { //定时器0中断服务程序 TH0=(65536-50000) / 256; TL0=(65536-50000) % 256; if(++t == 20) { //1s t = 0; cnt++; P1 = LED_CODE[cnt - 1]; P0 = DSY_CODE[cnt]; if(cnt == 9) { P1 = 0xff; cnt = 0; } }}void timer1() interrupt 3 { TH1=(65536-40000) / 256; //40ms高电平 TL1=(65536-40000) % 256; if(flag) { wave = ~wave; //变为低电平 flag = 0; } n++; if(n == 10) { //400ms时候,此时低电平已经持续360ms,翻转 n = 0; wave = ~wave; flag = 1; }}void main() { init_time0(); init_time1(); while(1);} 附录 矩形脉冲截图如下: 高电平:-760-(-800)=40ms,低电平:-400-(-760)=360ms。 |
|
|
|
只有小组成员才能发言,加入小组>>
2489 浏览 0 评论
1056浏览 2评论
672浏览 1评论
438浏览 0评论
173浏览 0评论
282浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 10:26 , Processed in 1.610108 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号