单片机课程设计 6单片机系统设计实例1.ppt

单片机课程设计 6单片机系统设计实例1.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电子技术锡焊技艺 常用元器件及仪器 单片机系统设计概述 单片机开发系统的使用 单片机系统设计实例 单片机系统开发的一般方法 1、确定任务 2、总体设计 3、硬件设计 4、软件设计 5、系统调试 1、设计任务:交通灯控制系统设计 设计要求 1)东西道(A)和南北道(B)上均有车辆要求通过时,A、B道轮流放行。 2)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K1开关模拟。 3)绿灯转换为红灯时黄灯亮 5秒钟。 4)能显示剩余时间。 5)能对时间进行调整。 2、总体设计 3、硬件设计 1)单片机选型:AT89S51 2)复位电路:上电+按钮 3)晶振电路 4)键盘:独立键盘+中断 5)数码管显示:LED 6)LED指示灯显示 3.1单片机基本电路设计 1)复位电路:上电+按钮 2)晶振电路 3)EA处理 4)电源设计 3.2键盘电路设计 较合理的原理图形式1 较合理的原理图形式2 3.3指示灯电路设计 3.4 剩余时间显示电路设计 要显示某个字形,就应使此字形的相应断码的二极管点亮,实际就是送一个用不同电平组合代表的数据字(显示码)来控制LED的显示,此数据称为字符的段码或字形码。 共阴极和共阳极LED显示器段码不同。 3.4 剩余时间显示电路设计 4、软件设计 4、软件设计 程序组成: 初始化(系统初始化,中断初始化) 定时(交通灯状态转换) 显示(指示灯、剩余时间) 参数调整 紧急状态 主程序 初始化程序、主程序 初始化程序 #includeAT89X51.H // 对单片机的口进行了定义 #define uint unsigned int #define uchar unsigned char uchar code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码组合,共阴极 uchar code b[4]={0xfe,0xfd,0xfb,0xf7}; //位码组合,低有效 uchar code c[4]={0x78,0xb8,0xcc,0xd4}; //不同状态下的LED uchar green=30,yellow=5; uchar m=35,n=30,s=0,cnt=0; void delay(uchar t); uchar key(); void display(); void main(void) { while(1) { display(); } } 显示子程序 void display() { P1=c[s]; P2=0xfe,P0=a[m%10]; delay(20); P2=0xfd,P0=a[m/10]; delay(20); P2=0xfb,P0=a[n%10]; delay(20); P2=0xf7,P0=a[n/10]; delay(20); } void delay(uchar t) //延时0.1*n毫秒 0 { uchar i; do { for(i=0;i23;i++) ;;; } while(t--); } 定时程序: 定时1秒可以吗? 不能直接定时 定时器方式1,16位,最高计数65536 假设晶振12MHz,一个机器周期1us。 最长定时65.536ms。 确定采用定时器T0,工作在方式1,定时50ms,1s需中断20次 初始值计算: 65536-50000=15536 =3CB0H TMOD初始化: 定时初始化程序: void init(void) { TMOD=0x01; TH0=0x3c; TL0=0xb0; IT0=1; ET0=1; TR0=1; EA=1; EX0=1; EX1=1; } void time1(void) interrupt 1 { TH0=0x3c; TL0=0xb0; cnt++; if(cnt=20) { s++; if(s3) s=0; switch(s) { case 0:m=green+yellow,n=green;break; case 1:n=yellow;break; case 2:m=green,n=green+yellow;break; case 3:m=yellow;break; } } } void int1(void) interrupt 2 { P1=0xd8,

文档评论(0)

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

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

1亿VIP精品文档

相关文档