课件第11章-显示接口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg51.h> sbit P3_7=P3^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; unsigned char count; void delay(unsigned int time) { unsigned int j=0; for(;time>0;time--) for(j=0;j<125;j++); }
case 1://交通灯程序 { unsigned int i; char a,k; X=X+1; P1=0xff; a=P1; k=a&0xc0;
switch(k) { case 0x40:{P1=0xde; for(i=0;i<5000;i++);//加上此延时,可实 现所需功能*/ break;} case 0x80:{P1=0xf3; for(i=0;i<5000;i++); break;} default:
LED大屏幕显示器结构及原理
LED点阵显示器是把很多LED发光二极管按矩 阵方式排列在一起,通过对每个LED进行发光 控制,完成各种字符或图形的显示。最常见的 LED点阵显示模块有5×7(5列7行),7×9 (7列9行),8×8(8列8行)结构。图11.10 是8×8结构的一半,另一半相同,只是com1com4与上一半是对应相连的。
R15
100R
R16
100R
R9
D10 D11 D12
100R
LED-RED
R10
100R
LED-GREEN
R11
100R
18
XTAL2
LED-YELLOW
R12
100R
9
RST
LED-RED D13
R13
100R
D14
+5V
29 30 31
LED-YELLOW
R14
+5V 100R
PSEN ALE EA
unsigned char X=0; unsigned char TL=0;//交通灯内的局部令牌。 unsigned char i=0; // timer1-timer4交通灯的时间计数,由于只有二 位断码管,实际值要小10倍, //编制程序时要注意这一点!TR为跑马灯的延时计 数。 unsigned int timer1=600,timer2=30,timer3=900,timer4= 30,time,TR=5; unsigned char *T=list; sbit back_ten=P3^6;//十位控制端 sbit back_one=P3^7;//个位控制端
case 2: { P1=0xf3; time=timer3; timer3--; if(timer3==00) { timer3=900; TL++;} break; }
case 3: { P1=0xf5; time=timer4; timer4--; if(timer4==00) { timer4=30; TL=0;} break; } default:break;
} } }} case 2://倒计时的十位显示程序 { X=X+1; back_one=0; //如果交换此两句顺序,倒计时个 位将闪烁! back_ten=1; P2=ledseg[time/100];//十位段码 break; }
switch(X)//作功能选择 { case 0://跑马灯程序 { X=X+1; led=*T; TR--; if(TR==0) { TR=5; i++; T++; } if(i>7){ i=0;T=list;} break; }
①读P3.7口,进行加1计数和超界处理; ②拆分计数器数值——个位、十位; ③查找/输出显示码到P0和P2口。 计数值拆分: 取模运算(%)→个位 整除10运算(/)→十位 查找/输出显示码: 按拆分值输出相应数组元素
流程图
计数器←1
P3.7= 0?
Y
N
计数器加1
N
>99 ?
Y
图11.2 计数显示器流程图
电路图
LED-GREEN
D7 D8 D9 U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 LED-YELLOW
switch(TL) { case 0: { P1=0xde; time=timer1; timer1--; if(timer1==00) { timer1=600; TL++;} break; }
case 1: { P1=0xee; time=timer2; timer2--; if(timer2==00) {timer2=30; TL++;} break; }
LED-RED
R1
100R
D1 D2 D3 D4 D5 D6
LED-RED 1 2 3 4 5 6 7 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51 LED-RED
R2
100R
LED-YELLOW
R3 R4 100R
100R
LED-GREEN
R5 R6
仿真效果
补充*:LED显示器结构与原理
LED显示块是由发光二极管显示字段的显示 器件。 在微机应用系统中通常使用的是七段LED。 这种显示块有共阴极与共阳极两种,如图810所示。七段显示块与微机接口非常容易。 如表8-1所示。
(a)共阴极
(b)共阳极
(c)管脚配置
图8-10 七段LED显示块
程序
void main(void) { count=0; //计数器赋初值 P0=table[count/10]; //P0口显示初值 P2=table[count%10]; /P2口显示初值 while(1) //进入无限循环 {图11.3 程序运行效果 if(P3_7==0) //软件消抖,检测按键是否压下 {
COM3
COM2
COM1
COM4
列
1
LED
LED
LED
LED
列
2
LED
LED
LED
LED
列
3
LED
LED
LED
LED
case 3:// 倒计时的个位显示程序 { X=0; back_ten=0; back_one=1; P2=ledseg[(time%100)/10];//个位段码 break; } default:break; } }
以上程序的跑马灯程序及交通灯控制程序与前 面项目基本相同,只是增加了数码管的动态显 示驱动程序。
R7
LED-YELLOW 10k
100R
R8
LED-GREEN 10k
100R
图 11.4 带倒计时的交通灯与跑马灯同时运行电路图
程序流程图
中断入口
恢复定时器定时初 值
图11.5 主程序及中断服务程序流程图
X=0执行跑马灯程 序 开始
ห้องสมุดไป่ตู้
程序走向判断 X=?
X=1执行交通灯控 制程序
X=2还是X= 3? 定时器初始化、开 定时器中断(每 50ms)中断一次 X=2进行十位驱 动:先送十位位 选,再送求得的十 位段码 X=3进行个位驱 动:先送个位位 选,再送求得的个 位段码
表8-1 七段LED的段选码
项目三任务6带倒计时的交通灯控 制器(同时运行跑马灯)
要求:用两位数码管显示交通灯倒计时的时间, 交通灯与跑马灯同时运行。
动态显示是一种按位轮流点亮各位数码管的显 示方式,即在某一时段,只让其中一位数码管 “位选端”有效,并送出相应的字型显示编码。 此时,其它位的数码管因“位选端”无效而都 处于熄灭状态;下一时段按顺序选通另外一位 数码管,并送出相应的字型显示编码,依此规 律循环下去,即可使各位数码管分别间断地显 示出相应的字符。这一过程称为动态扫描显示。
main() { EA=1; ET0=1; TMOD=0x01; TH0=(-50000/2)/256;//fosc=6MHz,定时 50ms TL0=(-50000/2)%256; TR0=1; while(1); }
void int0() interrupt 1 //每50ms中断一 次的中断服务程序 { ET0=0; TR0=0; TH0=(-50000/2)/256;//恢复定时器初值 TL0=(-50000/2)%256; TR0=1; ET0=1;
第十一章 显示接口
目的:结合万年历的显示部分,介绍了LED显 示及LCD显示的相关问题。包括LED静态显示 与动态显示、LCD字符显示,重点分析万年历 显示程序,包括字符模块LCD1602的工作原 理、LED驱动芯片MAX7219的工作原理及它 们的编程控制问题。
LED显示
知识目标:LED动态显示与静态显示; MAX7219的工作原理; 技能目标:能编写驱动LED的静态与动态显示 程序;能制作跑马灯与带倒计时的交通灯同时 运行的系统。 素质目标:养成能克服困难,渡过学习难关的 习惯。
等待中断
X++下次中断进行 个位显示
X=0下次中断进行 跑马灯程序
中断返回
中断返回
这里给前面交通灯与跑马灯同时运行控制程序 里所用的令牌增加了两个值:一个是X=2,用 来控制数码管的十位显示;一个是X=3,用来 控制数码管的个位显示。
控制程序
#include <reg51.h> #define led P0 unsigned char list[]={0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e ,0xff};//跑马灯的图案。 //共阳数码管的段码表 unsigned char ledseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0 x82,0xf8,0x80,0x90,0xff}; //令牌控制:X=0跑马灯程序;X=1交通灯程序; X=2十位显示;X=3个位显示。
delay(10); if(P3_7==0) //若按键压下 { count++;//计数器增1 if(count==100) //判断循环是否超限 count=0; P0=table[count/10]; //P0口显示初值 P2=table[count%10]; //P2口显示初值 while(P3_7==0); //等待按键松开,防止连续计数 } } }
只要每位显示间隔的时间足够短,我们看到各 数码管好像是“同时”显示的。 动态显示的电路图:
图 11.4 动态显示电路图
项目三任务6解答
电路设计 在项目三(交通灯与跑马灯同时运行)的基础 上,再扩展电路。用P2口作为二个数码管的段 码控制,P3口的二位作为位码控制。注意,图 11.5所示为仿真电路图,在实做时,要对段码 及位码进行驱动设计,如,在每一输出引脚上 接上非门(如74LS04)或一输入一输出与门 (74LS07)。
项目四任务2计数显示器
要求:对按键动作进行计数和显示,达到99 后重新由1开始计数。 任务分析:本任务要求对一个按键进行按下次 数的计数。这里有两个问题,一是按键动作的 读入,二是数字的显示。
电路如图11.1所示。个位LED接P2 口;十位LED接P0口(上拉电阻)
分析: