数码管流动显示(自己的单片机)
单片机 显示 自己 数码管 流动
2023-09-27 14:29:23 时间
/**********************************************************************************
* 标题: 试验数码管上显示数字( 单片机直接实现位选...
/**********************************************************************************
* 标题: 试验数码管上显示数字( 单片机直接实现位选 共阴极) *
* *
* 连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 *
***********************************************************************************
* *
* 请学员认真消化本例程,用573锁存器控制和单片机脚直接位选控制(非译码器控制)数码管 *
***********************************************************************************/
#include reg51.h
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}; //段码控制
//此表为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 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 i--)
for(j = 200; j j--);
蓬莱仙羽 麦子学院讲师,游戏蛮牛专栏作家,CSDN博客专家,热爱游戏开发,热爱Coding!
/**********************************************************************************
* 标题: 试验数码管上显示数字( 单片机直接实现位选 共阴极) *
* *
* 连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 *
***********************************************************************************
* *
* 请学员认真消化本例程,用573锁存器控制和单片机脚直接位选控制(非译码器控制)数码管 *
***********************************************************************************/
#include reg51.h
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}; //段码控制
//此表为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 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 i--)
for(j = 200; j j--);
蓬莱仙羽 麦子学院讲师,游戏蛮牛专栏作家,CSDN博客专家,热爱游戏开发,热爱Coding!
相关文章
- 《迷人的8051单片机》----第3章 入门C语言 3.1数据和运算
- C51单片机使用4-中断第一讲-定时器中断
- C51单片机使用3-数码管显示
- 《例说8051:单片机程序设计案例教程》——1-3 8051的开发流程与工具
- 51单片机定时器实现LED闪烁
- 51单片机0号与1号外部中断实例
- 51单片机:独立按键与矩阵按键控制数码管
- 单片机学习——看门狗
- ST7789-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)
- 单片机模块化编程
- STM32单片机利用软件定时器实现分时多任务(使用HAL库编写)
- 【蓝桥杯单片机组省赛】第九届彩灯控制器
- 【蓝桥杯单片机组模块】8、DS1302时钟模块
- 第 1 章 单片机概述
- STC15单片机-数码管显示PCB板温度(TM1620驱动芯片使用介绍)
- STC15单片机-RS-485通信
- STC15单片机-新建工程的文件夹说明
- 【51单片机】:闪灯、流水灯(从左往右)、流水灯(从右往左)、蜂鸣器。
- 【51单片机-数码管】:用51单片机写一个八个数码管中选用任意相邻两个数码管,用来循环显示0-99之间的数据,数据显示间隔为0.5s
- K_A00_003 基于单片机驱动OLED 1.3 字符/切换图片/滚动显示
- K_A00_001 基于多种单片机驱动OLED 0.96 显示字符图文时钟及滚动显示