单片机交流
直播中

李芳

7年用户 1441经验值
私信 关注
[问答]

怎样去设计单片机的Proteus仿真电路?

怎样去设计单片机proteus仿真电路
单片机的Proteus仿真电路具有哪些功能?

回帖(1)

李童

2021-7-19 15:45:33
设计单片机的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。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分