160 likes | 248 Views
实训二 数码管驱动. 七段式数码管原理. 1. 锁存器原理. 2. 3. 数码管的静态显示. 数码管的动态显示. 4. 5. 发挥要求. 1 、 LED 七段式数码管. 公共电阻限流 各路分别限流. 2. 2014/11/3. 2 、三态双向总线收发器 ——74LS245 原理. 引脚说明: DIR: 数据传输方向选择:(仿真图中为 AB/ ) 为高电平时, A 入 B 出;低电平时, B 入 A 出。 :输出允许 高电平时,输出端为高阻态;低电平,输 出等于输入。
E N D
实训二 数码管驱动 七段式数码管原理 1 锁存器原理 2 3 数码管的静态显示 数码管的动态显示 4 5 发挥要求
1、LED七段式数码管 公共电阻限流 各路分别限流 2 2014/11/3
2、三态双向总线收发器——74LS245原理 引脚说明: DIR:数据传输方向选择:(仿真图中为AB/ ) 为高电平时,A入B出;低电平时,B入A出。 :输出允许 高电平时,输出端为高阻态;低电平,输 出等于输入。 A1-A8:数据输入(或输出)端; B1-B8:数据输出(或输入)端; 3 2014/11/3
在一个共阴极数码管上静态显示0——15(F) #include<reg51.h> #define unit unsigned int #define uchar unsigned char uchar code table[ ]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delayms(unit x); void display(uchar y); void main() {uchar i;
while(1) {for(i=0;i<16;i++) display(i);}} void display(uchar y) {P2=table[y]; delayms(400); P2=0x00;} void delayms(unit xms) { unit i,j; for(i=xms;i>0;i--) for(j=130;j>0;j--);}
思考: 如果将数码管改为共阳极,则Proteus仿真图及程序应相应做哪些修改?
数码管动态显示的原理 即几个数码管一个一个的显示,数码管之间切换时间如果较短,利用视觉暂留现象,让人感觉好像几个数码管同时显示。 数码管动态显示时,几个数码管有两种控制信号:一种是字形码控制信号,每个数码管都相同; 一种是控制哪个数码管显示的信号,相当于是每个数码管的公共(com)端: 如果是共阴极,如果要让某个数码管亮,必须加低电平; 如果是共阳极,如果要让某个数码管亮,必须加高电平。
(1)在八位数码管上动态显示(一位一位显示0——9)(1)在八位数码管上动态显示(一位一位显示0——9) #include<reg51.h> #include<intrins.h> #define unit unsigned int #define uchar unsigned char uchar code table[]={0xc0,0xf9,0xa4,0xb0, 0x99, 0x92,0x82,0xf8,0x80,0x90}; void delayms(unit x); void display(uchar y); void main() { uchar aa=0x80,j;
while(1) {P3=aa; for(j=0;j<10;j++) display(j); aa=_cror_(aa,1);}} void display(uchar y) {P0=table[y]; delayms(400); P0=0xff;} void delayms(unit xms) { unit i,j; for(i=xms;i>0;i--) for(j=130;j>0;j--);}
动手做做: 如果在如图中的八个数码管上依次显示12345678,即: 如何编程实现?
(2)利用最后两个数码管显示秒,且到60从头开始。(2)利用最后两个数码管显示秒,且到60从头开始。 #include<reg51.h> #include<intrins.h> #define unit unsigned int #define uchar unsigned char uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6, 0xa1, 0x86,0x8e }; void delayms(unit x); void display(uchar y);
void main() {uchar z,shi,ge; while(1) {for(z=0;z<60;z++) {shi=z/10;ge=z%10; P3=0x80;display(ge); P3=0x40;display(shi);}}} void display(uchar y) {P0=table[y]; delayms(60); P0=0xff;}
void delayms(unit xms) { unit i,j; for(i=xms;i>0;i--) for(j=130;j>0;j--);}
5、学生发挥部分 编程实现:一个能显示时、分、秒的数码管显示时钟,如1 1 - 2 3 - 3 2