📄 数码管.c
字号:
/*******************************************************************************
* 标题: 试验数码管上如何显示数字 *
* 功能: *
********************************************************************************
* 通过本例程了解 74HC595(串入并出)LS138(译码器)的基本原理和使用 *
* * *
* 请学员认真消化本例程,懂74C595 LS138 在C语言中的操作 *
********************************************************************************/
#include <reg52.H>
extern void HC595SendData(unsigned int SendVal); /*声明引用外部函数*/
unsigned int LedNumVal; /*定义变量,作计数器*/
unsigned int LedOut[5]; /*定义数组*/
//unsigned int w;
//else IO/*位声明*/
sbit LS138A=P2^2; /*74LS138译码器的A端口接单片机的P2.2口*/
sbit LS138B=P2^3;
sbit LS138C=P2^4;
/*---------------------74LS138在开发板中的连接方式:-----------------------------------
**1.G1接BVCC:--------||当选通端(G1)为高电平,另外两个选通端(/(G2A)/(G2B))为低电平时
**2./G2A和/GAB都接地:||可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出.
**3.A端口接单片机的P2.2口:
**4.B端口接单片机的P2.3口:
**5.C端口接单片机的P2.4口:
** 说明:由开发板的电路连接可知,74LS138已经一直处于准备就绪状态,可以执行译码工作.
** A、B、C这三个端口组合形成一个0~7取值范围的10进制数,然后在Y0--Y7这8个端口选择
一个对应的端口输出低电平,即实现译码。
**举例:(A、B、C)==010,则Y2端口输出低电平,其余的7个端口输出全为高电平.
---------------------------------------------------------------------------------------*/
/*此表为 LED 的字模-- -- 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20)*/
unsigned char code Disp_Tab[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1, 0xff, 0xf7 };
void delay(unsigned int i) /*延时函数*/
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
main() /*主函数*/
{
while(1)
{
unsigned int HC595SendVal; /*定义变量*/
char i;
LedNumVal++; /*程序大循环计数*/
LedOut[0]=Disp_Tab[LedNumVal%10000/1000]; /*千位的数码管显示字模存入数组LedOut[0]中*/
LedOut[1]=Disp_Tab[LedNumVal%1000/100]&0x7f; /*百位 0X7F是数码管的小数点的值*/
LedOut[2]=Disp_Tab[LedNumVal%100/10]&0x7f; /*十位数码管显示字模存入数组LedOut[2]中*/
LedOut[3]=Disp_Tab[LedNumVal%10]; /*个位数码管显示字模存入数组LedOut[3]中*/
for (i=0;i<4;i++)
{
/*------------------------将数码管显示的段码发送给74HC595----------------------*/
HC595SendVal=LedOut[i]; /*将数码管显示的千位数据,百位数据..依次保存到
74HC595要发送的数据变量中*/
HC595SendVal<<=8; /*将HC595SendVal中数据移到高8位,数码管输出在低8位*/
// HC595SendVal|=Output;
HC595SendData(HC595SendVal);/*发送数码管显示的段码给74HC595,使其控制数码管和发光管*/
/*74HC595的输出接4个数码管的段码和8个发光管*/
/*------------------------------------------------------------------------------*/
/*-------------------------开数码管显示位选-------------------------------------*/
switch(i) /*i就定义了第0个数码管显示千位数,其它位以此类推*/
{
case 0:LS138A=0; LS138B=0; LS138C=0; break; /*数码管第一位显示*/
case 1:LS138A=1; LS138B=0; LS138C=0; break; /*数码管第二位显示*/
case 2:LS138A=0; LS138B=1; LS138C=0; break; /*数码管第三位显示*/
case 3:LS138A=1; LS138B=1; LS138C=0; break; /*数码管第四位显示*/
case 4:LS138A=0; LS138B=0; LS138C=1; break; /*数码管下面的LED*/
}
/*------------------------------------------------------------------------------*/
delay(200);
}
LS138A=1; LS138B=1; LS138C=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -