问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

速求proteus中基于89C51做的交通信号灯或者其它的也行,要proteus和keil两部分文件

发布网友 发布时间:2022-04-23 00:45

我来回答

3个回答

热心网友 时间:2023-10-09 12:39

交通信号灯,Proteus里面有专门的元件供仿真用,以下是程序和仿真图。

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P3^0; //东西向指示灯

sbit YELLOW_A=P3^1;

sbit GREEN_A=P3^2;

sbit RED_B=P3^3; //南北向指示灯

sbit YELLOW_B=P3^4;

sbit GREEN_B=P3^5;

sbit KEY1=P1^0;

sbit KEY2=P1^1;

sbit KEY3=P1^2;

//延时倍数,闪烁次数,操作类型变量

uchar Flash_Count=0,Operation_Typea=1,LEDsng,LEDsns,LEDewg,LEDews,discnt;

uint Time_Count=0,time;

uchar ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};

void displaysn()

{

LEDsng=((time-Time_Count)/20)%10;

LEDsns=((time-Time_Count)/20)/10;

LEDewg=0x10;

LEDews=0x10;

}

void displayew()

{

LEDewg=((time-Time_Count)/20)%10;

LEDews=((time-Time_Count)/20)/10;

LEDsng=0x10;

LEDsns=0x10;

}

//定时器0 中断函数

void T0_INT() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

switch(Operation_Type)

{

case 1: //东西向绿灯与南北向红灯亮

if((Time_Count%20)==0)displayew();

RED_A=0;YELLOW_A=0;GREEN_A=1;

RED_B=1;YELLOW_B=0;GREEN_B=0;

if(++Time_Count!=time) return;

Time_Count=0;

Operation_Type=2;

break;

case 2: //东西向黄灯开始闪烁,绿灯关闭

LEDewg=0x0;

LEDews=0x0;

if(++Time_Count!=8) return;

Time_Count=0;

YELLOW_A=~YELLOW_A;GREEN_A=0;

if(++Flash_Count!=10) return; //闪烁

Flash_Count=0;

Operation_Type=3;

break;

case 3: //东西向红灯与南北向绿灯亮

if((Time_Count%20)==0)displaysn();

RED_A=1;YELLOW_A=0;GREEN_A=0;

RED_B=0;YELLOW_B=0;GREEN_B=1;

if(++Time_Count!=time) return;

Time_Count=0;

Operation_Type=4;

break;

case 4: //南北向黄灯开始闪烁,绿灯关闭

LEDsng=0x0;

LEDsns=0x0;

if(++Time_Count!=8) return;

Time_Count=0;

YELLOW_B=~YELLOW_B;GREEN_A=0;

if(++Flash_Count!=10) return; //闪烁

Flash_Count=0;

Operation_Type=1;

break;

}

}

void t1_isr() interrupt 3

{

TR1=0;

TH1=(65536-3000)/256;

TL1=(65536-3000)%256;

TR1=1;

switch(discnt)

{

case 0:

P2=0x02;

P0=ledtab[LEDewg];

break;

case 1:

P2=0x01;

P0=ledtab[LEDews];

break;

case 2:

P2=0x08;

P0=ledtab[LEDsng];

break;

case 3:

P2=0x04;

P0=ledtab[LEDsns];

break;

default:discnt=0;break;

}

discnt++;

discnt&=0x03;

}

void delay()

{

uint i;

for(i=0;i<1000;i++);

}

//主程序

void main()

{

TMOD=0x11; //T0 方式1

EA=1;

ET0=1;

TR0=1;

TH1=(65536-3000)/256;

TL1=(65536-3000)%256;

TR1=1;

ET1=1;

time=100;

Time_Count=100;

Time_Count=0;

Operation_Type=1;

while(1)

{

if(KEY1==0)//按一下加1S

{

delay();

if(KEY1==0)

{

while(KEY1==0);

TR0=0;

time+=20;

LEDsng=(time/20)%10;

LEDsns=(time/20)/10;

LEDewg=0x10;

LEDews=0x10;

}

}

if(KEY2==0)//按一下减1S

{

delay();

if(KEY2==0)

{

while(KEY2==0);

TR0=0;

time-=20;

if(time==0)time=20;

LEDewg=(time/20)%10;

LEDews=(time/20)/10;

LEDsng=0x10;

LEDsns=0x10;

}

}

if(KEY3==0)//启动

{

delay();

if(KEY3==0)

{

while(KEY2==0);

TR0=1;

Time_Count=0;

}

}

}

}

热心网友 时间:2023-10-09 12:39

要文件,恐怕是要付费的。

参考以下的,自己做一做,并不难:

http://hi.baidu.com/do_sermon/item/92e081f975f6120ad99e72ec

热心网友 时间:2023-10-09 12:39

基于51单片机的交通灯C语言程序设计十字交叉路口的交通灯控制器,是很常见的课程设计题目。做而论道以前写过一个,功能十分简单。
最近,综合了一些百度知道中的题目要求,写出了一个稍稍复杂一点设计方案,使用了大家比较喜欢的C语言编写程序。

基本功能如下:

(1)东西、南北方向各设有一个绿、黄、红指示灯,两个显示数码管。
(2)两个方向交替允许通行,基本放行时间为25s,另外有黄灯闪烁5s。
(3)控制人员可以暂停自动的交替,使某个方向可以无限长时间的通行。
(4)暂停期间,控制人员可以调整通行的时间,程序中还设置了调整的上下限。
(5)暂停之后,灯光将按照设置的通行时间自动变换通行方向。
(6)在正常通行期间,可以强制变换通行方向。强制变换的时候,也是要先显示闪烁的黄灯,然后切换到指定的方向。

程序用PROTEUS仿真成功,并没有进行硬件实验。仿真截图画面如下。

插图链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/2b4a22423e0d5c4972f05de6.html#
http://hi.baidu.com/do_sermon/item/255f69c7c8132850bcef6965
C语言的控制程序如下:
//------------------------------------------------
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

//----------------定义接口------------------------
#define K_IN P1 //指定按键输入端口
#define Star_Stop 1 //指定按键输入端口
#define Time_ADD 2 //指定按键输入端口
#define Time_SUB 4 //指定按键输入端口
#define Turn_EW 8 //指定按键输入端口
#define Turn_SN 16 //指定按键输入端口

sbit D_R = P3^0;
sbit D_Y = P3^1;
sbit D_G = P3^2;
//----------------定义变量------------------------
uchar Key_C; //新键值
uchar Key_L; //上次键值
uchar Trg; //触发(有键按下)triger
uchar Trg_L; //上次触发
uchar Key_P; //确实按下
uchar n_2ms, n_0D5s, D_SEC = 60; //60实际上是30秒
uchar code D_seg[] = { //共阳段码
0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x90}; //0-9
bit s_g, run, hong;
//----------------延时----------------------------
void delay(uint z)
{
uint x, y;
for(x = z; x > 0; x--) for(y = 123; y > 0; y--);
}
//----------------读按键--------------------------
void KeyRead( void ) //读按键所在端口,送到全局变量
{
Key_L = Key_C; //上次按键数值
Trg_L = Trg;
Key_C = ~K_IN; //反相读入,有键按下,将读入1
Trg = Key_C & (Key_C ^ Key_L);
Key_P = Key_C & Trg_L; //确认按下
}
//----------------初始化--------------------------
void init(void)
{
TMOD = 0x01; //T0定时方式1
TH0 = (65536 - 2000) / 256; //2ms@12MHz
TL0 = (65536 - 2000) % 256;
TR0 = 1; //启动T0
ET0 = 1; //开T0中断
EA = 1; //开总中断
//---------------------
D_Y = 0; //关灯
D_R = hong; //红灯取决于当前的hong
D_G = ~D_R; //绿灯则相反
n_0D5s = D_SEC; //倒计时的秒数(2倍的数值)
}
//----------------主函数--------------------------
void main(void)
{
hong = 1; //hong = 1: 东西为红灯
init();
run = 1; //开机即运行
while(1) {
delay(8); //延时8ms
if (Star_Stop & Key_P) {
run = ~run;
if (!run) init();
}
if (Time_ADD & Key_P && !run) {
D_SEC += 2;
if (D_SEC > 120) D_SEC = 120;
n_0D5s = D_SEC;
}
if (Time_SUB & Key_P && !run) {
D_SEC -= 2;
if (D_SEC < 20) D_SEC = 20;
n_0D5s = D_SEC;
}
if (Turn_EW & Key_P && run && hong) n_0D5s = 11;
if (Turn_SN & Key_P && run && !hong) n_0D5s = 11;
}
}
//----------------T0中断函数----------------------
void T0_INT(void) interrupt 1
{
TL0 = (65536 - 2000) % 256; //重新写入初值
TH0 = (65536 - 2000) / 256; //2ms@12MHz
//----------------数码显示------------------------
s_g = ~s_g; //十位个位交替显示
if (s_g) {P2 = 0; P0 = D_seg[(n_0D5s / 2) / 10]; P2 = 1;}
else {P2 = 0; P0 = D_seg[(n_0D5s / 2) % 10]; P2 = 2;}
//----------------修改时间------------------------
n_2ms--;
if (n_2ms % 5 == 0) KeyRead(); //10ms读一次按键
if (n_2ms == 0) {
n_2ms = 250; //定时500ms
if (run) { //如果是正在运行
n_0D5s--; //就倒计时
if(n_0D5s == 1) n_0D5s = D_SEC + 1;//减到1就重新开始
if(n_0D5s == D_SEC + 1) {//如果是重新开始
if (hong) { //如果当前是红灯亮
hong = 0; //下面就改成绿灯亮
D_Y = 0; //关闭黄灯
D_G = 1; //打开绿灯
D_R = 0; //关闭红灯
}
else { //否则就改成红灯亮
hong = 1;
D_Y = 0; //关闭黄灯
D_G = 0; //关闭绿灯
D_R = 1; //打开红灯
} }
if(n_0D5s <= 11) {//如果是最后5秒
D_Y = ~D_Y; //黄灯闪烁
D_G = 0; //关闭绿灯
D_R = 0; //关闭红灯
} } } }
//----------------程序结束------------------------
跪求单片机89C51控制交通灯的课程设计

本实验设计主要是利用AT89C52芯片、发光二极管等一些电路元件设计一个简单的在不同的时间控制不同的灯亮还有周期循环的流水灯电路。并利用说学的知识完成程序设计、画出原理图及接线图,通过主装、调试电路、自行排除故障,最终实现流水等功能。课程设计强调以能力培养为主,在独立完成设计制作任务的同时注意...

实时时钟模块选哪家?

实时时钟模块可以选择许多不同的制造商和型号,具体选择取决于您的应用需求和预算。一些流行的实时时钟模块品牌包括DS1302、MA电商平台6925和MCP7941。这些模块都具有精度高、稳定性好、功耗低等优点,并具有不同的功能和特性,可以满足各种不同的应用需求。您可以根据您的具体要求和预算选择最适合的实时时钟模块。实时时钟模块可以找深圳市兴威帆电子技术有限公司,本公司具有经验丰富的开发工程师和应用工程师,致力于公司自主知识产权IC等产品的研发和技术支持,已开发出多款成熟的产品并大量生产、销售及出口,我公司高精度实时时钟模块产品获得多项国家专利,...

proteus 中89c51芯片如何显示vcc和gnd

默认是不显示的,如果你要显示,可以这样:菜单\Template\Set Disigh Defauls\Hidden Objects(在左下角)\Show Hidden Pins? 勾选

proteus 找不到89c51 89s51之类的单片机 搜不到

在装仿真软件时有一个单片机驱动程序,在仿真软件原文件里。点击安装 .安装完毕后,打开单片机软件。 在软件界面上找到 Flash然后在下拉菜单中找到Configure Flash Tools 打开后在窗口中找到Debug,单击后找到下拉菜单中找到仿真软件。

用AT89c51与DS18B20做数字温度计proteus怎么连接仿真图和C语言编程?

1、PROTEUS安装好后,默认不会在桌面上产生快捷方式。先打开开始菜单,依次点击“程序、Proteus7Professional、ISIS7Professional”打开PROTEUS。2、单击图中的P,添加单片机等元件。3、用关键字搜索,89C51,再加几个LED,因为是仿真就不用加限流电阻和晶振复位的元件了。4、把元件排列放好,再放一个电源。

proteus中89C51的30脚如何仿真

proteus中89C51的30脚是ALE信号输出脚,输出的信号是用于访问外部存储器时需要地址锁存信号的。因ROM在内部了,所以,只有在访问外部数据存储器时才有输出信号。即是执行MOVX指令时才有输出信号。要用C语言写程序时,要用XDATA定义变量,再访问这些变量时才是读/写外部数据存储器,才有ALE信号输出。见下图...

...proteus的文件库是不是不完整啊,怎么找不到89c51,如果有完整的文件库...

你要找AT89C51。而且你那个是画PCB的,不是画原理图的。PCB封装的话AT89C51要DIP40封装

温控直流电机调速系统设计

1.6 仿真完成控制电路的绘制,将proteus与keil开发工具结合,搭建了单片机开发平台,实现二者的联调,然后仿真出控制电路。1.7 仿真结果分析当仿真开始运行时,各个模块处于初始状态。点击右边的独立键盘加速或是减速按钮。显示模块开始显示数字,然后点击正传反转,电机的驱动模块能够实现电机的正转.反转.加速.减速.停止等操作。

pertus 如何与keil联机?

1.首先要安装好这两个软件。2.保证Proteus已破解。3.下载并安装vdmagdi.exe(自己搜一下)文件,安装后x:\Keil\C51\BlN文件夹下就有VDM51.dll文件了。4.进入KeilC,新建一个工程,并为该工程选择一个合适的CPU(如AT 89C51),加入源程序。注意:KeilC的工程文件一定要与Proteus的图形文件放在同...

MSC-51单片机交通灯论文

编写好源程序后,采用keil软件对其进行编译,使其生成单片机可以识别的.hex文件,再把此文件导入单片机89C51中即可。硬件电路和源程序及目标文件都设计完后,我们可以采用相关软件进行仿真,以使交通信号灯控制系统的设计更加准确,可靠。设计者采用PROTUES软件进行仿真调试,仿真时注意此软件使用,从而进一步熟悉...

哪位哥哥姐姐知道用proteus开发89C51单片机时图中的这款器件叫什么呢...

这个是 4输入或非门(带选通端) 属于逻辑运算 芯片 不属于单片机 是74系列 型号为7425(74hc25 74ls25等) 一个7425里有2个4输入或非门 4输入或非门是指 只有当4个输入A和B为低电平(逻辑0)时输出为高电平(逻辑1)否则为0, 看图中意思应该是 k1-k4是四个中断源,一般情况为低电平...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
自动回复软件(自动回复软件下载) 庐山的原名叫什么 庐山的命名由来和文化传说有哪些? 怎样轻松运营本地资讯网站 微信发图片怎么突然模糊了 怎么将excel表格中的数字去掉怎么将excel表格中的数字去掉一个_百度... ...由于没有工作经验,求职会计和出纳都是石沉大海,怎么办? 我想找一种测试工具。工作范围:软件测试,产品功能测试,电子相关器件... 有一个小米手机推荐游戏,我想不起来名字是英文的 音乐超级带感 好像... 怎么样吃石榴最爽? 天然气分类中,CNG、SNG、LNG中甲烷含量的范围及压力范围是多少? 栩字起名用意好吗?吉祥吗 用vb数组设计打分统计程序 羽和习和栩字的五笔那样打 砂浆中水泥、砂、石灰用量如何计算 &quot;口\非\羽\高&quot;这四个字可以分别加哪个相同的字组成新字? SNJ是什么意思? 我的WIN7记事本文件打开是乱码,怎么办 LOL sng战队是苏宁的么 SNG传输图片的格式是什么? SNG电子竞技标志英文用的什么字体 vivox60pro手机发热严重是原因? vivox60手机发热? vivo x60发热 vivox6sa每次充电手机都发烫?怎么回事?是假的吗 冰柜买哪个牌子好? vivo新手机充电发烫什么原因? 电冰箱哪个牌子好?知名品牌推荐 冰箱什么品牌最好啊?排 前十 的是哪些? vivox60手机发烫是什么原因 求问这个孩子的名字 Q333Q (输下关键字好找,,,BJD.SNG) VB 控制picturebox内容适应A4纸张大小,横向纵向调整,适合打印输出和图形输出一致! 十字路*通灯控制2 设计任务:利用单片机设计一个十字路*通灯控制器 设计要求: 利用单片机的定 请问这个台语(闽南语)姓名发音可能是哪些字呢? 求做150吨水泥罐的制作图纸 栩五笔怎么打字 如何评价小米9SE? 小米9se到底怎么样? 小米8se和小米9se对比有哪些区别? 小米9se怎么样 小米9se怎么样?值得买吗? 小米9SE怎么样?值不值得买?AMOLED屏到底好不好? 小米9和9se哪个颜值好看? 小米9se能玩刺激战场吗 小米8se与小米9se谁更好? 小米9Se对小米RedMik2O应该选那个? 爱奇艺怎么用支付宝登陆? 用支付宝付宝付了爱奇艺会员怎么登陆? 用支付宝在电脑上爱奇艺上直接扫码付费的会员怎么再次登录? 苹果六怎么用支付宝登陆爱奇艺?
  • 焦点

最新推荐

猜你喜欢

热门推荐