51单片机的静态数码管

1.138译码器

1.74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。

2.使用138译码器,可以用三位来控制八位,如下图所示,定义LSA=0,LSB=0,LSC=0,则逻辑值为0,根据单片机原理图,则LED1为低电平,再控制相应的数码管,达到静态控制数码管的效果

2.数码管

1.LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。

2.采用16进制数的方法,1为亮,0为灭,于是可以建立数组来表示0到9以及A到F的字符(由下至上来算16进制数);

3.分析数码管的形状,确定八位数字,从而确定图案;

4.0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;//定义数码管的字码(0到9和A到F)

#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;
/*实现38译码器的使用*/
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

//使用数组定义,code为定义常量数组,将数组定义在ROM中
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//定义数码管的字码
void main()
{
//表示38译码器
LSA=1;
LSB=1;
LSC=0;
P0=smgduan[10];

}






好的,下面为您提供一个51单片机静态数码管计算器的实例代码: ``` #include<reg52.h> #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管显示0~9,A~F uchar num1,num2,result;//记录输入的数值和结果 uchar flag=0;//标志位,用于选择运算符 void delay(uchar z)//延时函数 { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar num)//数码管显示函数 { P0 = table[num]; } void keyscan()//按键扫描函数 { uchar keyvalue = P1; keyvalue &= 0x0f; if(keyvalue != 0x0f) { delay(10); keyvalue = P1; keyvalue &= 0x0f; if(keyvalue != 0x0f) { switch(keyvalue) { case 0x0e: num1=1; display(num1); break;//1键 case 0x0d: num1=2; display(num1); break;//2键 case 0x0b: num1=3; display(num1); break;//3键 case 0x07: num1=4; display(num1); break;//4键 case 0x0e: num1=5; display(num1); break;//5键 case 0x0d: num1=6; display(num1); break;//6键 case 0x0b: num1=7; display(num1); break;//7键 case 0x07: num1=8; display(num1); break;//8键 case 0x0e: num1=9; display(num1); break;//9键 case 0x0d: num1=0; display(num1); break;//0键 case 0x0b: flag=1; break;//加法键 case 0x07: flag=2; break;//减法键 case 0x0e: flag=3; break;//乘法键 case 0x0d: flag=4; break;//除法键 case 0x0b: flag=5; break;//等于键 case 0x07: num1=0; num2=0; result=0; display(num1); break;//清零键 } } } } void main() { while(1) { keyscan(); if(flag != 0) { keyscan(); num2 = num1; num1 = 0; display(num1); switch(flag) { case 1: result = num1 + num2; break;//加法运算 case 2: result = num1 - num2; break;//减法运算 case 3: result = num1 * num2; break;//乘法运算 case 4: result = num1 / num2; break;//除法运算 } display(result); flag = 0; } } } ``` 这是一个简单的静态数码管计算器,通过按键输入数字和运算符,然后在数码管显示结果。代码中使用了延时函数、数码管显示函数和按键扫描函数等。需要注意的是,这个程序中只能进行加减乘除四则运算,如果需要扩展其他运算,可以自行添加代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值