8位共阴极数码管动态驱动程序
//******程序作用: 驱动8位数码管****************************************
//******单片机型号: STC90C16RD+****************************************
//******编写日期: 2013年6月8日晚****************************************
//******编写人: Elitah***************************************
//##################################################################
//↓↓↓↓↓预定义开始#######################################################
#include
#define uchar unsigned char
#define ulong unsigned long
//以下定义断选接口
#define DuanXuan P0
//以下定义位选接口
#define WeiXuan P2
//↑↑↑↑↑预定义结束#######################################################
//↓↓↓↓↓全局变量开始#####################################################
uchar HexCode [] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F} ;
uchar DispBit [] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F} ;
//↑↑↑↑↑全局变量结束#####################################################
//↓↓↓↓↓函数声明开始#####################################################
void openDigitalTube(ulong) ;
void dispDigitalTube(int,int) ;
void delay(int) ;
//↑↑↑↑↑函数声明结束#####################################################
//↓↓↓↓↓主函数开始#######################################################
void main()
{
while(1)
{
openDigitalTube(99999999) ;
}
}
//↑↑↑↑↑主函数结束#######################################################
//↓↓↓↓↓函数定义开始#####################################################
void openDigitalTube(ulong x)
{
if (x >= 0 && x < 10)
{
dispDigitalTube(x,7) ;
}
else if(x >= 10 && x < 100)
{
dispDigitalTube(x / 10,6) ;
dispDigitalTube(x % 10,7) ;
}
else if(x >= 100 && x < 1000)
{
dispDigitalTube(x / 100,5) ;
dispDigitalTube((x / 10) % 10,6) ;
dispDigitalTube((x % 100) % 10,7) ;
}
else if(x >= 1000 && x < 10000)
{
dispDigitalTube(x / 1000,4) ;
dispDigitalTube((x / 100) % 10,5) ;
dispDigitalTube((x / 10) % 10,6) ;
dispDigitalTube(x % 10,7) ;
}
else if(x >= 10000 && x < 100000)
{
dispDigitalTube(x / 10000,3) ;
dispDigitalTube((x / 1000) % 10,4) ;
dispDigitalTube((x / 100) % 10,5) ;
dispDigitalTube((x / 10) % 10,6) ;
dispDigitalTube(x % 10,7) ;
}
else if(x >= 100000 && x < 1000000)
{
dispDigitalTube(x / 100000,2) ;
dispDigitalTube((x / 10000) % 10,3) ;
dispDigitalTube((x / 1000) % 10,4) ;
dispDigitalTube((x / 100) % 10,5) ;
dispDigitalTube((x / 10) % 10,6) ;
dispDigitalTube(x % 10,7) ;
}
else if(x >= 1000000 && x < 10000000)
{
dispDigitalTube(x / 1000000,1) ;
dispDigitalTube((x / 100000) % 10,2) ;
dispDigitalTube((x / 10000) % 10,3) ;
dispDigitalTube((x / 1000) % 10,4) ;
dispDigitalTube((x / 100) % 10,5) ;
dispDigitalTube((x / 10) % 10,6) ;
dispDigitalTube(x % 10,7) ;
}
else if(x >= 10000000 && x < 100000000)
{
dispDigitalTube(x / 10000000,0) ;
dispDigitalTube((x / 1000000) % 10,1) ;
dispDigitalTube((x / 100000) % 10,2) ;
dispDigitalTube((x / 10000) % 10,3) ;
dispDigitalTube((x / 1000) % 10,4) ;
dispDigitalTube((x / 100) % 10,5) ;
dispDigitalTube((x / 10) % 10,6) ;
dispDigitalTube(x % 10,7) ;
}
}
void dispDigitalTube(int x,int y)
{
DuanXuan = HexCode[x] ;
WeiXuan = DispBit [y] ;
delay(10) ;
DuanXuan = 0xFF ;
WeiXuan = 0xFF ;
}
void delay(int x)
{
int i = 0,j = 0 ;
for(i = x;i > 0;i--)
for(j = 10;j > 0;j--) ;
}
//↑↑↑↑↑函数定义结束#####################################################
共阴极数码管动态驱动STC90C16RD 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)