C51课程设计.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程论文 题 目 C51课程设计 陆海林 学生姓名 20091309071 学 号 学 院 电子与信息工程专 业 信息工程 指导教师 陈苏婷 二O一一 年 十二 月 二十八 日1.实现交通灯控制: 十字 路口 按照红灯50s 黄灯 5s 绿灯45s的规律 实现数码管显示一、设计思路在现实中,十字路口的一般是在绿灯转红灯的时候出现黄灯。在本系统的设计中,亮灯分为2步:1、红灯亮50s 2、绿灯亮45s,紧接着黄灯亮5s。在这个时候,另一个方向上,的亮灯顺序相反。关于硬件的选择,我需要3个灯和2位数码管,除此之外,就是本系统的控制核心AT89S51。二、原理图以及引脚介绍:1、实现原理:2、电路原理图: 总体:纵向:横向: 注意:引脚使用介绍:本系统中一共使用了P0组、P1组、P2^0、P2^1。1、P1组为数码管的段选端口。2、本图中连接数码管位选端的单片机引脚,实际是连接锁存器的; 而数码管的位选端都接地。3、其他的引脚使用情况参看上述电路原理图。4、本系统使用的是共阴数码管。5、复位引脚、晶振引脚在本文中不作介绍。3、程序流程图:到45sY N到50sY到95sNY到100sNYN三、代码://本系统使用12M晶振//本系统采用四个锁存器,纵向的数码管占两个,横向的数码管占两个//采用共阴数码管,故所有数码管的位选引脚一律接地//本系统使用四个引脚控制四个锁存器#includereg52.h#define uchar unsigned char #define uint unsigned int/*******************************纵向寄存器定义*************************/sbit z_hong=P0^0; //纵向红绿黄灯sbit z_huang=P0^1;sbit z_lv=P0^2;sbit z_shi=P0^3;sbit z_ge=P0^4;/*****************************横向寄存器定义**************************/sbit h_hong=P0^5; //横向红绿黄灯sbit h_huang=P0^6;sbit h_lv=P0^7;sbit h_shi=P2^0;sbit h_ge=P2^1;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} ; //显示数码管的码表uint counter;void time()interrupt 1 //50ms定时{TH0=(65535-50000)/256;TL0=(65535-50000)%256;counter++;}void disp_z(uint shi,uint ge) //纵向显示函数{z_shi=1;P1=table[shi];z_shi=0;z_ge=1;P0=table[ge];z_ge=0;}void disp_h(uint shi,uint ge) //横向显示函数{h_shi=1;P1=table[shi];h_shi=0;h_ge=1;P0=table[ge];h_ge=0;}void main(){uint timer; uint shi,ge;uint shi_z;uint ge_z;uint shi_h;uint ge_h;counter=0;timer=0;TH0=(65535-50000)/256;TL0=(65535-50000)%256;TMOD=0x01;ET0=1;TR0=1;EA=1;while(1){ if(counter==50) //定时到达1s,开始操作 {counter=0;ge=timer%10;shi=timer/10;timer++;if(timer45){ h_hong=0; //点亮横向的红灯 z_lv=0; //点亮纵向的绿灯 shi_h=shi; //横向显示:红灯时间 ge_h=ge; disp_h(shi_h,ge_h); shi_z=shi; //纵向显示:绿灯时间 ge_z=ge; disp_z(shi_z,ge_z); }if(timer50timer=45) { h_hong=0; //点亮横向的红灯 z_lv=1; //关闭纵向的绿灯,点亮纵向的黄灯 z_huang=0; shi_h=shi; //横向显示:红灯时间 ge_h=ge; disp_h(shi_h,ge_h); shi_z=shi-45; //纵向显示:黄灯时间 ge

文档评论(0)

gujf + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档