1.试验数码管上显示数字( 单片机直接实现位选 共阴极)
* 连接方法:P0与J12 用8PIN排线连接
P1与JP16 用排线连接
*
请学员认真消化本例程,用573锁存器控制和单片机脚直接位选控制(非译码器控制)数码管
#include
void delay(unsigned int i); //函数声名
char DelayCNT;//定义变量
//此
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
为 LED 的字模, 共阴数码管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制
//此表为8个数码管位选控制, 共阴数码管 1-8个 -
unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制 查表的方法控制
/************主函数**********************/
main()
{
unsigned int i,LedNumVal=1 ;
//变量定义
unsigned int LedOut[10];
//变量定义
DelayCNT=0;
while(1)
{
if(++DelayCNT>=20)
//控制数字变化速度
{
DelayCNT=0;
//20个扫描周期清零一次
++LedNumVal;
//每隔20个扫描周期加一次
}
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];
LedOut[4]=Disp_Tab[LedNumVal%10000/1000];
//千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点
LedOut[6]=Disp_Tab[LedNumVal%100/10];
//十位
LedOut[7]=Disp_Tab[LedNumVal%10]; //个位
for( i=0; i<9; i++)
{
P0 = LedOut[i];
P1 = dispbit[i]; //使用查表法进行位选
/*
switch(i)
//使用switch 语句控制位选
{
case 0:P1 = 0x7F; break;
case 1:P1 = 0xbF; break;
case 2:P1 = 0xdF; break;
case 3:P1 = 0xeF; break;
case 4:P1 = 0xf7; break;
case 5:P1 = 0xfb; break;
case 6:P1 = 0xfd; break;
case 7:P1 = 0xfe; break;
}
*/
delay(150);
//扫描间隔时间
太长会数码管会有闪烁感
}
}
}
/*******************延时函数**********************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
2.标题:试验数码管上显示数字(译码器位选 共阴极) *
* 连接方法:P0与J12 用8PIN排线连接
* 请学员认真消化本例程,用573锁存器和译码器控制和数码管 *
********************************************************************************/
#include
sbit LS138A = P2^2;
//定义138译码器的输入A脚由P2.2控制
sbit LS138B = P2^3;
//定义138译码器的输入脚B由P2.3控制
sbit LS138C = P2^4;
//定义138译码器的输入脚C由P2.4控制
void delay(unsigned int i); //函数声名
char DelayCNT;
//此表为 LED 的字模, 共阴数码管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
/************主函数**********************/
main()
{
unsigned int i,LedNumVal ;
unsigned int LedOut[10];
DelayCNT=0;
while(1) //进入循环状态
{
if(++DelayCNT>=50)
{
DelayCNT=0;
//延时计数 每扫描一次加一次
++LedNumVal; //每隔50个扫描周期加一次
}
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];
LedOut[4]=Disp_Tab[LedNumVal%10000/1000];
//千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点
LedOut[6]=Disp_Tab[LedNumVal%100/10];
//十位
LedOut[7]=Disp_Tab[LedNumVal%10]; //个位
for( i=0; i<8; i++) //实现8位动态扫描循环
{
P0 = LedOut[i]; //将字模送到P0口显示
switch(i)
//使用switch 语句控制位选 也可以是用查表的方式 学员可以试着自己修改
{
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;
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;
}
delay(150);
}
}
}
/***************************************************************************
*
*
*
延时程序
*
****************************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
3.标题: 74HC573输出使能试验(单片机直接实现位选 共阴极)
* 连接方法:P0与J12 用8PIN排线连接
P16与JP11(P2) 用排线连接
*
* 目的:熟悉74HC573的LE输出使能控制
*
* 请学员认真消化本例程,用573锁存器控制和单片机脚直接位选控制(非译码器控制)数码管*
#include
#include
void delay(unsigned int i); //函数声名
sbit LE = P1^0; //定义输出使能控制脚在P1.0上
char DelayCNT;//定义变量
//此表为 LED 的字模, 共阴数码管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制
//此表为8个数码管位选控制, 共阴数码管 1-8个 -
unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制 查表的方法控制
/************主函数**********************/
main()
{
unsigned int i,LedNumVal=1 ;
//变量定义
unsigned int LedOut[10];
//变量定义
DelayCNT=0;
while(1)
{
if(++DelayCNT>=20)
//控制数字变化速度
{
DelayCNT=0;
//20个扫描周期清零一次
++LedNumVal;
//每隔20个扫描周期加一次
}
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];
LedOut[4]=Disp_Tab[LedNumVal%10000/1000];
//千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点
LedOut[6]=Disp_Tab[LedNumVal%100/10];
//十位
LedOut[7]=Disp_Tab[LedNumVal%10]; //个位
for( i=0; i<9; i++)
{
LE = 0; //输出使能,锁存器不输出数据
P0 = LedOut[i];
LE = 1; //输出使能,锁存器将8位数据一口吐出
P2 = dispbit[i]; //使用查表法进行位选
delay(150);
//扫描间隔时间
太长会数码管会有闪烁感
}
LE = 0; //锁存器不输出数据
}
}
/**************************************************************************
*
* 延时处理
*
****************************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}