51单片机数码管程序演示教学

合集下载

C51单片机03(数码管最终)PPT课件

C51单片机03(数码管最终)PPT课件
You Know, The More Powerful You Will Be
谢谢大家
荣幸这一路,与你同行
It'S An Honor To Walk With You All The Way
演讲人:XXXXXX 时 间:XX年XX月XX日
MCS-51 单片机
1
a
2
b
3
c
a
4
dfgb
5
e
6 7 8
e
c
f
d
g
dp
dp
GND
9
单个共阴数码管与51单片机的连接
如何实现数码管静 态显示“5”?
执行语句 P1 = 0x6d;
数码管的静态显示
完整的数码管的静态显示程序 头文件
#include<reg52.h> 主函数
void main(void)
g f COM a b
a f gb
e
c
d DP
e d COM c DP
阳极 1 +5V
0 阴极 0V
LED发光二极管的工作原理
共阳极1 CV+O5CMCV
DP g f e d c b a
DP g
0:亮 1:灭
f ed c ba
0 COM 共阴极
共阳接法
共阴接法
半导体数码显示器内部接法
0:灭 1:亮
12、延时10毫秒
13、… … … … 14、熄灭各个数码管 15、选通第8个数码管,同时禁止其他数码管 16、送第8个数码管要显示的字符的代码段 17、延时10毫秒 18、跳回第一步开始循环执行
数码管的动态显示
程序代码如下: #include <AT89X51.H> #define unchar unsigned char void Delay(unchar delaytime); sbit LED1=P2^0; sbit LED2=P2^1; sbit LED3=P2^2; sbit LED4=P2^3; sbit LED5=P2^4; sbit LED6=P2^5; sbit LED7=P2^6; sbit LED8=P2^7;

51单片机 PC机 通信 数码管 0-9

51单片机 PC机 通信 数码管 0-9
{
unsigned chari=100;
while(i--);
}
void init()//定时器及串口的初始化
{
SCON=0x40; //串口模式1,
TMOD=0x20; //T1工作模式2(8为自动重装)。通信用已成固定模式
PCON=0x00; //波特率不倍增
TH1=0xfd;//设置计数初值(波特率为9600b/s)
init();//初始化定时器和串口
while(1)
{if(K1==0) //判按键是否按下fasong(); //如果按键按下向乙机发送灯亮的状态
xianshi();//数码管显示接收的数字
}
}
}
voidxianshi()//数码管显示从已机接收的数字
{
SMG_q=0;//选择千位数码管
P0=table[num];//显示接收的数字
delay();//加入短暂延时
P0=0XFF;//清除数码管显示,因是共阳型,所以不是0
SMG_q=1;//关闭千位数码管
}
void main()//主程序
{
TL1=0xfd;
TR1=1;//启动定时器
IE=0x90; //开串口中断和总中断
}
voidfasong()//发送
{
while(K1==0);//按键恢复时执行下面的(等待按键释放)
SBUF=++num;
if(num>9)
num=0;
while(TI==0);//甲机发送采用查询的方式
TI=0;//清除中断
signed char num=-1;//数字的初始值
sbitSMG_q= P1^0;//定义数码管阳级控制脚(千位)

51单片机键盘数码管显示(带程序)

51单片机键盘数码管显示(带程序)

期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。

2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。

它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。

A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。

RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。

最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。

max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)

max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)
SPI1_InitStructure.SPI_Mode=SPI_Mode_Master;//设置SPI工作模式;设置为主SPI
SPI1_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; //高位MSB在先
SPI1_InitStructure.SPI_CPOL = SPI_CPOL_High; //选择了串行时钟的稳态,时钟悬空高
*功能:STM32_SPI1硬件配置初始化
*入口参数:无
*出口参数:无
*说明:STM32_SPI1硬件配置初始化,使用3V3
****************************************************************************/
void SPI1_Init(void)
SPI1_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿
SPI1_InitStructure.SPI_NSS = SPI_NSS_Soft;CPolynomial = 7;//CRC值计算的多项式
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//SPI1相关引脚

2024年度51单片机超详细教程PPT

2024年度51单片机超详细教程PPT

实例:按键中断程序设计
3. 在主程序中初始化LED 灯和按键输入端口。
4. 开启外部中断0并等待 按键输入。
5. 当按键按下时,触发外 部中断0并执行中断服务 程序,实现LED灯的闪烁 功能。
2024/3/23
32
Part
06
接口技术与应用扩展
2024/3/23
33
并行I/O口扩展方法
2024/3/23
存放程序代码和常数表格 等,一般使用ROM或 EPROM实现
STEP 03
特殊功能寄存器
用于控制单片机的各种功 能,如定时器、中断等
存放变量、中间结果等, 一般使用RAM实现
9
I/O端口及特殊功能寄存器
要点一
I/O端口
要点二
特殊功能寄存器
与外部设备通信的接口,分为并行I/O和串行I/O两种
用于控制I/O端口的操作,如设置端口模式、读取端口状态 等
优势
51单片机在嵌入式系统领域具有广泛的应用,其稳定的性能和成熟的生态系统使得开发者能够快速开发出高质量 的嵌入式应用。
2024/3/23
5
应用领域与市场需求
应用领域
智能家居、工业自动化、医疗设备、汽车电子、物联网等。
市场需求
随着物联网、人工智能等技术的快速发展,对单片机的性能、功耗、安全性等方面提出了更高的要求 。同时,市场对于单片机的定制化、差异化需求也日益增加。
23
Part
05
中断系统与定时器/计数器应 用
2024/3/23
24
中断概念及中断源识别方法
2024/3/23
中断概念
中断是指在CPU执行程序的过程中,由于某种原因,暂时停止当前正在执行的程序,转 而去执行另一段特殊程序,待特殊程序执行完毕后,再返回原程序继续执行的过程。

51单片机数码管显示及矩阵键盘扫描程序

51单片机数码管显示及矩阵键盘扫描程序

51单片机数码管显示及矩阵键盘扫描程序硬件实验十一八段数码管实验一、实验任务1、在静态数码管上轮流显示数字0-9。

2、在两个4位数码管上动态显示数字0-9二、流程图及程序静态显示:流程图:程序代码:#include#define uchar unsigned chucharcodevalue[10]={0xC0,0xF9,0xA4,0xB0,0X99,0x92,0x82,0xF8,0 x80,0x90};//0 -9数码管显示段码void delay(char x) //延时子程序{uchar i;for(i=0;i<200;i++);}main() //主函数{int i;while(1){for(i=0;i<10;i++) //显示0-9{P0=codevalue[i];delay(500); //延时1秒}}}动态显示:#include#includetab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; //数码管显示数字字段unsigned char tab2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//片选字段unsigned char i,k,j,x;void delay(x); //声明延时子函数void main() //主函数{while(1){for(i=0;i<8;i++) //显示0-7{ P1=tab1[i];P0=tab2[i];delay(5); //延时}P1=tab1[8]; P0=tab2[0]; delay(5); //显示8-9P1=tab1[9]; P0=tab2[1]; delay(5);}}void delay(x) //延时函数定义{do{for(j=0;j<250;j++)for(k=0;k<250;k++);}}硬件实验十二矩阵键盘扫描显示一、实验任务1、把矩阵键盘上的按键输入的键码在静态数码管上显示出来。

单片机C51程序设计 数码管显示ppt课件

单片机C51程序设计 数码管显示ppt课件
#define WR573(dat)\ {\
P0 = d);\ LE573 = 0;\ }
中断源的符号、称号及产生的条件
INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 T0:定时器/计数器0中断,由T0计满回零引起。 T1:定时器/计数器l中断,由T1计满回零引起。 TI/RI:串行I/O中断,串行端口完成一帧字符发送/接纳后引起。
定时/计数器编程运用
初始化程序应完成如下任务: 1.对TMOD赋值,以确定T0和T1的任务方式。 2.计算初值,并将其写入TH0、TL0或TH1、TL1。 3.中断方式时,那么对IE赋值,开放中断。 4.使TR0或TR1置位,启动定时/计数器定时或计数。
TR1:定时器1控制位,置位时定时器1任务 TR0:定时器0控制位,置位时定时器0任务
定时器初值 计算
设单片机晶振频率为6MHZ,求方式1时的定时器初 值.
定时时间=(2X-初值)×机器周期 X由定时器任务方式决议,分别为13、16、8. 机器周期=12/单片机晶振频率 fosc。 由以上公式可知:定时lms所需的机器周期为2us.个数 为500D,即0lF4H,任务方式为1(16位方式)时定时初 值是01F4H.
动态显示
动态显示的特点是将一切位数码管的段选线 并联在一同,由位选线控制是哪一位数码管有 效。选亮数码管采用动态扫描显示。所谓动态 扫描显示即轮番向各位数码管送出字形码和相 应的位选,利用发光管的余辉和人眼视觉暂留 作用,使人的觉得好似各位数码管同时都在显 示。动态显示的亮度比静态显示要差一些,所 以在选择限流电阻时应略小于静态显示电路中 的。
JBCflag ? C002 DECval C002: RET

51单片机驱动4位数码管的实现方法

51单片机驱动4位数码管的实现方法

51单片机驱动4位数码管的实现方法EA /VP 31X119X218RE SET 9RD 17W R 16INT 012INT 113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSE N29AL E/P 30TX D 11RX D 10U18051AB C D abcd efg d pL1A 7B 1C 2D 6LT 3BI 4LE5A 13B 12C 11D 10E 9F 15G14U24511VCCY1CRYSTA LC133pC233pR110kC310uFS1VCCR21k R31k R41k R51k R61k R71k R81k12345678161514131211109RP 1VCCS2电路如图所示。

相应的C 语言程序为: #includeunsigned int a0,a1,a2,a3,a; int t;sbit key=P0^2;void showit();//用于在数码管上显示的子程序 void delay_n40us(unsigned int n);void delay_n40us(unsigned int n) {unsigned int i; unsigned char j; for(i=n;i>0;i--) for(j=0;j<2;j++) ; }void showit() { t=10;while(t--) { a3=a/1000; a2=(a00)/100; a1=(a0)/10; a0=a;P1=0xe0+a0;delay_n40us(200);P1=0xd0+a1;delay_n40us(200);P1=0xb0+a2;delay_n40us(200);P1=0x70+a3;delay_n40us(200);}}void main(){a=6999;while(1){if(key==1){a=a-1;showit();}else showit();}}最后说说这个电路都实现了什么功能:即整机供电后,数码管从“6999”开始倒计数,此过程中如果开关S2被按下,则会停止倒计时,松开开关后倒计时继续。

【傻瓜51单片机讲义】 第6课 数码管实验教学

【傻瓜51单片机讲义】 第6课 数码管实验教学

0’ 1’ 2’ 3’ 4’ 5’ 6’ 7’ 8’ 9’
星嵌科技
0xF5 0x05 0xB3 0x97 0x47 0xD6 0xF6 0x85 0xF7 0xD7

学51
1.5 静态显示原理
• 所谓静态显示,就是每一个显示器各笔画段都要独占 具有锁存功能的输出口线,CPU把要显示的字形代码送 到输出口上,就可以使显示器显示所需的数字或符号, 此后,即使CPU不再去访问它,因为各笔画段接口具有 锁存功能,显示的内容也不会消失。 • 静态显示法的优点是显示程序十分简单,显示亮度大, 由于CPU不必经常扫描显示器,所以节约了CPU的工作 时间。但静态显示也有其缺点,主要是占用的I/O口线 较多,硬件成本较高。所以静态显示法常用在显示器 数目较少的应用系统中。
学51
2.2 条件语句
• 条件语句是根据表达式的取值来决定程 序走向的语句,最常用的便是if条件语 句。 • 根据if语句中分支的不同,可以分为:
–单分支if语句 –双分支if语句 –多分支if语句
星嵌科技

学51
单分支if if语句 2.3 单分支if语句
if (表达式) { 语句; }
星嵌科技

学51
2.1 数组
• 数组是把相同数据类型的变量,按照顺序组织起来的 一个集合 。 • 数组元素的表示 数组名[下标]。 • 数组中的单个变量称为数组元素。 • 数组从结构上来说是一种构造类型或者聚合类型。 • 在内存中连续分配。
星嵌科技

星嵌科技

学51
3.程序分析 3.程序分析
• 1. void Write_595(void) 功能分析。 • 2. void main(void) 主函数功能分析。

51单片机控制流水灯和数码管

51单片机控制流水灯和数码管

• 灯光在微电脑控制之下完成由亮到暗的逐 渐变化,感觉像是在呼吸。 • 实现灯不同亮度的两种方法: 1 调节灯的保护电阻, 2 使用PWM。
数码管的操作
• 数码管的介绍 • 数码管的操作
g f GND a b a a f e d g b c dp b c d e f g dp a b c d e f g dp
任务
• 第一次一个管亮流动一次,第二次两个管 亮流动,依次到8个管亮,然后重复整个过 程。 • 先奇数亮再偶数亮,循环三次;一个灯上 下循环三次;两个分别从两边往中间流动 三次;再从中间往两边流动三次;8个全部 闪烁3次;关闭发光管,程序停止。 • 用8个发光管演示出8位二进制数累加过程。
呼吸灯的操作
较复杂,成本较高。
动态显示
动态显示的特点是将所有位数码管的段选线并 联在一起,由位选线控制是哪一位数码管有效。选 亮数码管采用动态扫描显示。所谓动态扫描显示即 轮流向各位数码管送出字形码和相应的位选,利用 发光管的余辉和人眼视觉暂留作用,使人的感觉好 像各位数码管同时都在显示。动态显示的亮度比静 态显示要差一些,所以在选择限流电阻时应略小于 静态显示电路中的。
C51库函数 instrins.h
• 循环左移 unsigned char _crol_(unsigned char c,unsigned char b);
C语言中的<<和>>
• 每执行一次<<操作,被操作数高位数丢失, 低位补零;
C语言中的<<和>>
• 每执行一次<<操作,被操作数低位数丢失, 高位补零;
流水灯的操作
2013.0பைடு நூலகம்.22
• 点亮第一个灯; • 让第一个灯闪烁; • 从第一个灯依次点亮至最后一个灯;

51单片机数码管显示的简单实验

51单片机数码管显示的简单实验

这是关于51单片机数码管显示的简单实验,数码管依次从0计数显示至9,然后再跳回至0重新开始计数,如此反复。

电路中的数码管选用共阳型的,公共端直接接电源,数据端连至89S52的P0口。

电路图和汇编程序详解如下,供初学者参考:
(点击放大)
ORG 0000H ;程序从0开始
START: MOV R3,#0 ;使R3寄存器加载0
LJMP LOOP1 ;跳到LOOP1处执行
LOOP: CJNE R3,#10,LOOP1 ;如果R3不等于10,则跳至LOOP1处执行
LJMP START ;否则跳至START处执行
LOOP1: MOV A,R3 ;将寄存器R3的内容复制到ACC
MOV DPTR,#TABLE ;将DPTR指向编码表位置
MOVC A,@A+DPTR ;根据ACC的值取出编码表中的编码
MOV P0,A;P0口输出ACC的内容
CALL DELAY;调用延时子程序
INC R3 ;将R3寄存器的内容加1
LJMP LOOP ;跳至LOOP处执行
DELAY: ;0.2S延时子程序(12MHz晶振下)
MOV R7,#2 ;R7寄存器加载2次数
D1: MOV R6,#200 ;R6寄存器加载200次数
D2: MOV R5,#250 ;R5寄存器加载250次数
DJNZ R5,$ ;本行执行R5次
DJNZ R6,D2 ;D2执行R6次
DJNZ R7,D1 ;D1执行R7次
RET ;返回主程序
TABLE: ;编码表
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳数码管0~9字形编码END ;程序结束。

51单片机数码管循环显示0~9程序说明

51单片机数码管循环显示0~9程序说明

数码管循环显示0~9程序说明功能说明:用一位数码管循环显示数字0~9,数字间隔时间为0.2秒。

一、电路图数码管循环显示0~9电路图二、所用电子元器件A T89C51:单片机;7SEG—COM—AN—GRN:带公共端共阳七段绿色数码管;CAP、CAP—ELEC:电容、电解电容;CRYSTAL:晶振。

三、程序汇编语言编写的数码管循环显示0~9源程序代码如下:START:MOV DPTR,#TABLEMOV R0,#00HLOOP: MOV A,R0MOVC A,@A+DPTRMOV P0,AACALL DLY1SINC R0CJNE R0,#10,LOOPJMP STARTDLY1S:MOV R5,#10HD1: MOV R6,#100HD2: MOV R7,#100HDJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETTABLE:DB 0C0H,0F9H,0A4H,0B0HDB 99H, 92H, 82H, 0F8HDB 80H, 90H, 88H, 83HDB 0C6H,0A1H,86H, 8EHENDProtetus 安装说明使用说明1.先安装Setup71.exe,提示选择Setup Type时默认选择即可;若提示No LICENCE 选择安装文件中"crack"-->MAXIM_LICENCE.lxk,打开安装。

2.安装完成后将crack-->文件夹BIN 和文件夹MODELS 下的文件复制到安装目录相应的文件夹内覆盖。

3.安装proteus.7.x-patch,选择patch,提示can not find the file. search the file,选择yes即可;然后选择bin文件中的ares.exe ;在选择models 中的avr.dll安装完毕退出即可。

注:***"Keil驱动"中的程序为Proteus与Keil联调的驱动。

数码管原理及显示_51单片机C编程ppt课件

数码管原理及显示_51单片机C编程ppt课件

.
4 一个共阴数码管循环显示0~9---单片机驱动
景德镇学院机电系
.
4 一个共阴数码管循环显示0~9---单片机驱动
景德镇学院机电系
第一步 用仿真软件Proteus画出上图。
第二步 用程序员书写软件UltraEdit将源程序书写完成。
第三步 用keil软件建立一个工程(用到上一步源程序),产生hex文件。
.
景德镇学院机电系
共阳数码管
3 数码管的显示段码---共阳
unsigned char seg7code[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80, 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳
.
4 一个共阴数码管显示一个数字编程---手动控制
第四步 将hex文件导入Proteus的单片机中,仿真运行看结果。
详细见具体操作!
.
STC micro
宏晶科技
.
景德镇学院机电系
3 数码管的显示段码----共阴
共阴数码管
unsigned char code seg7code[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//共阴
.
景德镇学院机电系
1 数码管的结构
外型及引脚.2 数码管的分源自---共阴景德镇学院机电系
❖ 共阴数码管 共阴数码管是指将所有发光二极管的阴极接到一起
形成公共阴极(COM)的数码管。 共阴数码管在应用时应将公共极 COM接到地线
GND 上,当某一字段发光二极管的阳极为高电平时, 相应字段就点亮。当某一字段的阳极为低电平时,相应 字段就不亮。共阴数码管内部连接如图3所示。

51单片机驱动16位数码管C语言程序

51单片机驱动16位数码管C语言程序

说明:本程序配合电路为:使用STC89C52、2个74hc138和1个74hc164完成16位数码管的检测任务。

其中74HC164完成数码管段码的输出,2个74HC138完成16个数码管位码的选择。

/*********************************接线关系:P0.0---164(P1、P2) DATP0.1---164(P8) CLKP0.2---138a(P6)GP2.3---138b(P6)G特别说明:本程序位码表所对应74hc138(a、b、c)接线为:P2.2---138(P1) aP2.1---138(P2) bP2.0---138(P3) C*****************************************************/c语言程序如下:#include <reg52.h>#include <absacc.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define ON 0#define OFF 1sbit DAT_164=P0^0;sbit CLK_164=P0^1;sbit G_138a=P0^2;sbit G_138b=P2^3; //数码管显示开关uchar code seg[]={ //七段码表0x3f,0x06,0x5b,0x4f,0x66,0x6d, //0-5 00H-05H0x7d,0x07,0x7f,0x6f,0x77,0x7c, //6-b 06H-0BH0x39,0x5e,0x79,0x71,0x40,0x46, //c- -1 0CH-11H0x76,0x00,0x80,}; //H 全灭 . 12H-16Hunsigned char code wma3[]={0x00,0x04,0x02,0x06,0x01,0x05,0x03,0x07}; //此为位码表对应于138a-P2.2;138b-P2.1;138c-P2.0。

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。

最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档