目录
数码管简介
实验所用到的模块主要模块包括:数码管、单片机STC89C52、38译码器—74HC138译码器(用于位选):适用于数字电路中的 3—8 译码功能、74HC245(用于段选):适用于显示屏以及其他数字电路的驱动;
位选引脚:P2^2 P2^3 P2^4
段选引脚:P0^0 P0^1 P0^2 P0^3 P0^4 P0^5 P0^6 P0^7
静态数码管显示
数码管显示数字
实验现象
实验代码
#include "reg52.h"
typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8; //对系统默认数据类型进行重定义
#define DUAN_PORT P0 //使用宏定义数码管段段口
#define WEI_PORT P2 //使用宏定义数码管位选口
//位选数码管
u8 wei_code[9]={0xff,0xfa,0xf7,0xf3,0xef,0xea,0xe7,0xe3};
//段选共阴极数码管显示0~9数字
u8 duan_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//延迟函数
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
//数码管显示数字
void DsgShowNum()
{
while(1)
{
WEI_PORT=wei_code[0];
DUAN_PORT=duan_code[0];
delay_10us(100);
WEI_PORT=wei_code[1];
DUAN_PORT=duan_code[1];
delay_10us(100);
WEI_PORT=wei_code[2];
DUAN_PORT=duan_code[2];
delay_10us(100);
WEI_PORT=wei_code[3];
DUAN_PORT=duan_code[3];
delay_10us(100);
WEI_PORT=wei_code[4];
DUAN_PORT=duan_code[4];
delay_10us(100);
WEI_PORT=wei_code[5];
DUAN_PORT=duan_code[5];
delay_10us(100);
WEI_PORT=wei_code[6];
DUAN_PORT=duan_code[6];
delay_10us(100);
WEI_PORT=wei_code[7];
DUAN_PORT=duan_code[7];
delay_10us(100);
}
}
//主函数
void main()
{
while(1)
{
DsgShowNum();
}
}
数码管显示时间
实验现象
实验代码
//结合上面的
u8 hour = 9,minute = 57,second = 50;
//数码管显示时间
void DsgShowTime()
{
WEI_PORT = wei_code[0];
DUAN_PORT = duan_code[hour/10];
delay_10us(100);
WEI_PORT = wei_code[1];
DUAN_PORT = (duan_code[hour%10])+0x80;
delay_10us(100);
WEI_PORT = wei_code[2];
DUAN_PORT = duan_code[minute/10];
delay_10us(100);
WEI_PORT = wei_code[3];
DUAN_PORT = (duan_code[minute%10])+0x80;
delay_10us(100);
WEI_PORT = wei_code[4];
DUAN_PORT = duan_code[second/10];
delay_10us(100);
WEI_PORT = wei_code[5];
DUAN_PORT = (duan_code[second%10]);
delay_10us(100);
}
动态态数码管显示
数码管移动显示数字--666
实验现象
实验代码
//结合上面的
//移动显示--666
void DsgShowMove()
{
u8 i;
while(1)
{
for(i =0;i<9;i++)
{
u16 k = 200;
switch(i)
{
case 1:
while(k)
{
WEI_PORT = wei_code[0];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[1];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[2];
DUAN_PORT = duan_code[6];
delay_10us(100);
k--;
}
break;
case 2:
while(k)
{
WEI_PORT = wei_code[0];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[1];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[7];
DUAN_PORT = duan_code[6];
delay_10us(100);
k--;
}
break;
case 3:
while(k)
{
WEI_PORT = wei_code[0];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[7];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[6];
DUAN_PORT = duan_code[6];
delay_10us(100);
k--;
}
break;
case 4:
while(k)
{
WEI_PORT = wei_code[7];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[6];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[5];
DUAN_PORT = duan_code[6];
delay_10us(100);
k--;
}
break;
case 5:
while(k)
{
WEI_PORT = wei_code[6];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[5];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[4];
DUAN_PORT = duan_code[6];
delay_10us(100);
k--;
}
break;
case 6:
while(k)
{
WEI_PORT = wei_code[5];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[4];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[3];
DUAN_PORT = duan_code[6];
delay_10us(100);
k--;
}
break;
case 7:
while(k)
{
WEI_PORT = wei_code[4];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[3];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[2];
DUAN_PORT = duan_code[6];
delay_10us(100);
k--;
}
break;
case 8:
while(k)
{
WEI_PORT = wei_code[3];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[2];
DUAN_PORT = duan_code[6];
delay_10us(100);
WEI_PORT = wei_code[1];
DUAN_PORT = duan_code[6];
delay_10us(100);
k--;
}
break;
}
}
}
}
数码管移动显示图形--正方形
实验现象
实验代码
//移动显示--正方形
void DsgShowMove1()
{
u8 i;
while(1)
{
for(i =0;i<9;i++)
{
u16 k = 200;
switch(i)
{
case 1:
while(k)
{
WEI_PORT = wei_code[0];
DUAN_PORT = 0x39;
delay_10us(100);
WEI_PORT = wei_code[1];
DUAN_PORT = 0x0f;
delay_10us(100);
k--;
}
break;
case 2:
while(k)
{
WEI_PORT = wei_code[1];
DUAN_PORT = 0x39;
delay_10us(100);
WEI_PORT = wei_code[2];
DUAN_PORT = 0x0f;
delay_10us(100);
k--;
}
break;
case 3:
while(k)
{
WEI_PORT = wei_code[2];
DUAN_PORT = 0x39;
delay_10us(100);
WEI_PORT = wei_code[3];
DUAN_PORT = 0x0f;
delay_10us(100);
k--;
}
break;
case 4:
while(k)
{
WEI_PORT = wei_code[3];
DUAN_PORT = 0x39;
delay_10us(100);
WEI_PORT = wei_code[4];
DUAN_PORT = 0x0f;
delay_10us(100);
k--;
}
break;
case 5:
while(k)
{
WEI_PORT = wei_code[5];
DUAN_PORT = 0x39;
delay_10us(100);
WEI_PORT = wei_code[6];
DUAN_PORT = 0x0f;
delay_10us(100);
k--;
}
break;
case 6:
while(k)
{
WEI_PORT = wei_code[7];
DUAN_PORT = 0x39;
delay_10us(100);
WEI_PORT = wei_code[0];
DUAN_PORT = 0x0f;
delay_10us(100);
k--;
}
break;
}
}
}
}
结束语
新手正在加油学,有啥问题可以私聊