📄 数码管.lst
字号:
C51 COMPILER V7.10 数码管 03/20/2009 17:55:44 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE 数码管
OBJECT MODULE PLACED IN 数码管.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 数码管.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 标题: 试验数码管上如何显示数字 *
3 * 功能: *
4 ********************************************************************************
5 * 通过本例程了解 74HC595(串入并出)LS138(译码器)的基本原理和使用 *
6 * * *
7 * 请学员认真消化本例程,懂74C595 LS138 在C语言中的操作 *
8 ********************************************************************************/
9 #include <reg52.H>
10 extern void HC595SendData(unsigned int SendVal); /*声明引用外部函数*/
11 unsigned int LedNumVal; /*定义变量,作计数器*/
12 unsigned int LedOut[5]; /*定义数组*/
13 //unsigned int w;
14 //else IO/*位声明*/
15 sbit LS138A=P2^2; /*74LS138译码器的A端口接单片机的P2.2口*/
16 sbit LS138B=P2^3;
17 sbit LS138C=P2^4;
18 /*---------------------74LS138在开发板中的连接方式:-----------------------------------
19 **1.G1接BVCC:--------||当选通端(G1)为高电平,另外两个选通端(/(G2A)/(G2B))为低电平时
20 **2./G2A和/GAB都接地:||可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出.
21 **3.A端口接单片机的P2.2口:
22 **4.B端口接单片机的P2.3口:
23 **5.C端口接单片机的P2.4口:
24 ** 说明:由开发板的电路连接可知,74LS138已经一直处于准备就绪状态,可以执行译码工作.
25 ** A、B、C这三个端口组合形成一个0~7取值范围的10进制数,然后在Y0--Y7这8个端口选择
26 一个对应的端口输出低电平,即实现译码。
27 **举例:(A、B、C)==010,则Y2端口输出低电平,其余的7个端口输出全为高电平.
28 ---------------------------------------------------------------------------------------*/
29 /*此表为 LED 的字模-- -- 0 1 2 3 4 5 6 7 8 9 A b c d E
- - L P U Hidden _ (20)*/
30 unsigned char code Disp_Tab[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0
-x86,0xbf,0xc7,0x8c,0xc1, 0xff, 0xf7 };
31
32
33 void delay(unsigned int i) /*延时函数*/
34 {
35 1 char j;
36 1 for(i; i > 0; i--)
37 1 for(j = 200; j > 0; j--);
38 1 }
39
40
41 main() /*主函数*/
42 {
43 1 while(1)
44 1 {
45 2 unsigned int HC595SendVal; /*定义变量*/
46 2 char i;
47 2 LedNumVal++; /*程序大循环计数*/
48 2 LedOut[0]=Disp_Tab[LedNumVal%10000/1000]; /*千位的数码管显示字模存入数组LedOut[0]中*/
49 2 LedOut[1]=Disp_Tab[LedNumVal%1000/100]&0x7f; /*百位 0X7F是数码管的小数点的值*/
50 2 LedOut[2]=Disp_Tab[LedNumVal%100/10]&0x7f; /*十位数码管显示字模存入数组LedOut[2]中*/
51 2 LedOut[3]=Disp_Tab[LedNumVal%10]; /*个位数码管显示字模存入数组LedOut[3]中*/
52 2
53 2 for (i=0;i<4;i++)
C51 COMPILER V7.10 数码管 03/20/2009 17:55:44 PAGE 2
54 2 {
55 3 /*------------------------将数码管显示的段码发送给74HC595----------------------*/
56 3 HC595SendVal=LedOut[i]; /*将数码管显示的千位数据,百位数据..依次保存到
57 3 74HC595要发送的数据变量中*/
58 3
59 3 HC595SendVal<<=8; /*将HC595SendVal中数据移到高8位,数码管输出在低8位*/
60 3 // HC595SendVal|=Output;
61 3 HC595SendData(HC595SendVal);/*发送数码管显示的段码给74HC595,使其控制数码管和发光管*/
62 3 /*74HC595的输出接4个数码管的段码和8个发光管*/
63 3 /*------------------------------------------------------------------------------*/
64 3
65 3 /*-------------------------开数码管显示位选-------------------------------------*/
66 3 switch(i) /*i就定义了第0个数码管显示千位数,其它位以此类推*/
67 3 {
68 4 case 0:LS138A=0; LS138B=0; LS138C=0; break; /*数码管第一位显示*/
69 4 case 1:LS138A=1; LS138B=0; LS138C=0; break; /*数码管第二位显示*/
70 4 case 2:LS138A=0; LS138B=1; LS138C=0; break; /*数码管第三位显示*/
71 4 case 3:LS138A=1; LS138B=1; LS138C=0; break; /*数码管第四位显示*/
72 4 case 4:LS138A=0; LS138B=0; LS138C=1; break; /*数码管下面的LED*/
73 4 }
74 3 /*------------------------------------------------------------------------------*/
75 3 delay(200);
76 3 }
77 2 LS138A=1; LS138B=1; LS138C=1;
78 2 }
79 1
80 1 }
81
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 295 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -