Proteus电路仿真及应用(51单片机系列)

作者: 知弦分类: 校园学习 发布时间: 2020-02-16 13:37:48 浏览:656297 次

Proteus电路仿真及应用(51单片机系列)

RushSFV:
为什么要设置TH0,TL0:是因为一个空的盆要65536滴水滴进去才会满(产生中断),开始滴水之前可以先放入一部分水(设置TH0,TL0),叫做计数初值。如果现在要计数50000,那么可以先放入15536滴水,也就是计数初值为15536,再计数50000就可以溢出产生中断。

【回复】回复 @RB傻气 :因为 ~ 代表非的意思
一休想双休:
#include"reg51.h" unsigned char s【】={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6f}; unsigned char num=99; void delay(unsigned int n) { unsigned char i=0,j=0; for (i=0;i<n;i++) { for (j=0;j<120;j++); } } void key_scan() { unsigned char temp0=0,temp1=0,temp; P1=0xf0; if(P1!=0xf0) { delay(20); temp=P1; P1=0x0f; if(P1!=0x0f) { delay(20); temp1=P1; } } temp=temp0+temp1; if(temp==0xee) { num=0; } if(temp==0xed) { num=1; } } void display() { P2=s【num】 ; }void main() { while(1) { key_scan(); display(); } } 大佬可以帮我看看哪里错误吗 我编程通过了 课是还是不亮 矩阵按键那一节

【回复】谢谢大佬 大佬长命百,岁万寿无疆,原地暴富远离烦恼
【回复】temp=P1有问题,应该是temp0=P1
【回复】回复 @35057472208_bili :哈哈哈哈你好可爱!
susan_uu:
老师我今天真是太激动了,大学四年做毕设才算认真学习了proteus,之前非常害怕编程,今天头一次这么明白,感谢你

【回复】看来是队友啊 毕设让我们相聚在此[呲牙]
【回复】回复 @容我想想emmm :流下了不学无术的眼泪[笑哭]
【回复】哈哈哈哈哈哈,好巧,我也是
DerTraumer:
感谢老师,希望能多出一些视频。我看的MOOC上的单片机视频都只讲原理,不讲外围电路和具体实验程序,看了老师的视频,终于会用学过的单片机原理了。前面学了一大堆单片机理论和C语言,现在能用它们做实验,非常高兴。

【回复】https://www.bilibili.com/read/cv15803652?spm_id_from=333.999.0.0
相信光-冲向光:
定时器: #include"reg51.h" unsigned char s【】={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char count=0,num=0; void inittimer() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; EA=1; TR0=1; } void display() { P2=s【num】; if(num==10) { num=0; } } void main() { inittimer(); while(1) { display(); } } void timer_isr() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==20) { num++; count=0; } }

【回复】不亮的看看显示数值的是不是拿错了
【回复】问什么我的仿真的时候显示屏不亮啊
【回复】回复 @一只TOTO狸 :https://www.bilibili.com/read/cv15803734?spm_id_from=333.999.0.0
知弦:
安装Proteus软件时,尽可能的安装在英文路径,如果是win10系统,在运行软件时需要用管理员身份运行。

【回复】下载的proteus根本找不到基本元器件啊[大哭][大哭][大哭]
【回复】我用win10,安装根本不出现添加注册表,然后安好了就打不开,是不是我杀毒软件没关完鸭
【回复】用管理员运行都打不开是什么原因[惊讶]
相信光-冲向光:
中断: #include"reg51.h" sbit ex=P3^2; unsigned char s【】={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char num=0; void initex() { IT0=1; EX0=1; EA=1; ex=1; } void display() { P2=s【num】; if(num==10) { num=0; } } void main() { initex(); while(1) { display(); } } void ex_isr() interrupt 0 { num++; }

【回复】回复 @Amerite :同样的问题
【回复】我的为什么能编译过去,但是到proteus里实现不了?
相信光-冲向光:
计数器: #include"reg51.h" unsigned char s【】={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char num=0; void initcounter() { TMOD=0x06;//0000 0110 TH0=256-3; TL0=256-3; ET0=1; EA=1; TR0=1; } void display() { P2=s【num】; if(num==10) { num=0; } } void main() { initcounter(); while(1) { display(); } } void counter_isr() interrupt 1 { num++; }

【回复】大佬,我想问问计数器的初值有什么作用啊
【回复】打的一模一样,编译没问题但是 开关没反应
孙漂漂吖:
keil下载链接:https://pan.baidu.com/s/1EHiycq98MqeaOdCtXJo8_A 提取码:aq76

【回复】回复 @南柯洹梦 :复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1AgadHEYNsexzv7VHj6nO0g 提取码:g86z
【回复】有教程吗,软件安装管家没有
【回复】链接失效了,可以再发一次吗
相信光-冲向光:
LCD1602: #include"reg51.h" sbit RS=P3^0; sbit RW=P3^1; sbit E=P3^2; unsigned char str【】={"Hello world!"}; void delay(unsigned int t) { unsigned int i=0,j=0; for(i=0;i<t;i++) { for(j=0;j<120;j++); } } void writedat(unsigned char dat) { RS=1; RW=0; E=0; P2=dat; delay(5); E=1; E=0; } void writecom(unsigned char com) { RS=0; RW=0; E=0; P2=com; delay(5); E=1; E=0; } void initlcd() { writecom(0x38); writecom(0x0c); writecom(0x06); writecom(0x01); } void display() { unsigned int i=0; writecom(0x80); delay(5); while(str【i】!='\0') { writedat(str【i】); delay(5); i++; } } void main() { initlcd(); while(1) { display(); } }

【回复】照着做没有显示,这是为什么啊
【回复】回复 @炸天帮亚里士多德 : 把黑色加粗的括号用英文输入法打上去
【回复】回复 @Biwangchang :解决了吗,我也是
相信光-冲向光:
流水灯的代码 #include"reg51.h" sbit LED0=P2^0; void delay(unsigned int n) { unsigned int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<120;j++); } } void led() { int i=0; for(i=0;i<8;i++) { P2=~(0x01<<i); delay(250); } } void main() { int i=0 ; while(1) { //led(); for(i=0;i<8;i++) { P2=~(0x01<<i); delay(250); } } }

【回复】回复 @樱花う湖畔 :啊?我可以运行的啊
【回复】回复 @相信光-冲向光 :https://www.bilibili.com/read/cv15803618?spm_id_from=333.999.0.0
相信光-冲向光:
串口: #include"reg51.h" unsigned char recdat=0,flag=0; void initscon() { SCON=0x50; TMOD=0x20; TH1=256-3; TL1=256-3; ES=1; EA=1; TR1=1; } void senddat() { SBUF=recdat; while(!TI); TI=0; } void main() { initscon(); while(1) { if(flag==1) { senddat(); flag=0; } } } void scon_isr() interrupt 4 { recdat=SBUF; RI=0; flag=1; }

【回复】回复 @微尘MT :@微尘MT 我的也是
【回复】我的串口一直输不进去,不知道为啥
【回复】我的窜口输入一个值不会停
小田74824:
老师,我照着p7数码管做了仿真,但是延时程序一点用都没有。delay()里输入什么数字都没用,到底是啥问题想不明白。 #include"reg51.h" unsigned char s【】={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; //共阴0-9 void delay(unsigned int n) { unsigned int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<120;j++); } } void seg() { int i=0; for(i=0;i<10;i++) { P2=s【i】; //0011 1111 delay(1000); } } void main() { while(1) { seg(); } }

【回复】你hex文件生成没?程序没问题,如果生成了,需要导入proteus才能进行仿真,并且保证硬件连接正确
沁墨殇璃:
#include"reg51.h" unsigned char s【10】={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char count=0; unsigned char num=0; void inittimer() { TMOD=0x01; TH0=(65536-15536)/256; //(50ms=50000us) 256=2^8 TL0=(65536-15536)%256; ET0=1; //?????????ж? EA=1; //???????ж? TR0=1; //????????0 } void display() { P2=s【num】; if(num==10); { num=0; } } void main() { inittimer(); while(1) { display(); } } void timer_isr() interrupt 1 { TH0=(65536-50000)/256; //(50ms=50000us) 256=2^8 TL0=(65536-50000)%256; count++; if(count==20); { num++; count=0; } } 一样的程序为什么仿真无法出现计数器1s加一,求解

allmyfault158314:
#include "reg51.h" unsigned char s【】 = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7E,0x6F}; unsigned count = 0, num = 0; void inittimer() { TMOD = 0X01; TH0 = (65536-50000)/256; TL0 = (65536-50000)%256; ET0 = 1; EA = 1; TR0 = 1; } void display() { P2 = s【num】; if (num == 10) { num = 0 ; } } void main() { inittimer(); while(1); { display(); } } void timer_isr() interrupt 1 { TH0 = (65536-50000)/256; TL0 = (65536-50000)%256; count++; if(count == 20) { num++; count = 0; } } 老师我想问个问题,按照你的弄得,为撒我的会报错定时器.C(30): error C237: 'main': function already has a body。(而且以前能运行的程序也会出现这个错)

【回复】回复 @158gy158 :这个有啥毛病呢
【回复】回复 @知弦 :终于解决了,重新下载了一次
90257641510_bili:
#include<STC15F2K60S2.h> typedef unsigned int uint; void main() { uint mcc; TMOD=0x90; TH1=TL1=0; while(P33);//高电平等待 TR1=1; while(!P33);//低电平等待 while(P33);//T1已启动,等待结束高电平 TR1=0; mcc=TH1*256+TL1;//mcc乘以机器周期即脉宽 } 老师给了个程序叫我们测脉宽,怎么加显示的程序进去呀,请问一下,急急急

【回复】你去看下数码管或者lcd1602的程序,改一下就行

视频教程 课程 教学视频

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!