实现在led数码管上显示数字
#include<reg52.h> #define uint unsigned int
//#define uchar unsigned char #define DecodeMode 0x09 // 译码模式寄存器
#define Intensity 0x0a // 亮度寄存器
#define ScanLimit 0x0b // 扫描位数寄存器
#define ShutDown 0x0c // 低功耗模式寄存器
#define DisplayTest 0x0f #define ShutdownMode 0x00 // 低功耗方式
#define NormalOperation 0x01 // 正常操作方式
#define ScanDigit 0x07 // 扫描位数设置,显示8位数码管
#define DecodeDigit 0xff // 译码设置,8位均为BCD码
#define IntensityGrade 0x0a // 亮度级别设置
#define TestMode 0x01 // 显示测试模式 #define Testend 0x00
sbit din=P3^0;
sbit load=P3^1;
sbit clk=P3^2;
uint a,b,c,d=0;
uint table[]= {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00 };
uint table1[]= {
0xfe, 0xfd,0xfb, 0xf7, 0xef,0xdf,0xbf,0x7f
};
void delay(uint t)
{
for(a=0;a<t;a++)
for(b=0;b<120;b++);
}
void spi_write(uint bety,uint bet)
{
din=1;
load=1;
clk=1;
load=0;
for(c=0;c<8;c++)
{
if(bety&0x80)
din=1;
else din=0;
bety<<=1;
clk=0;
delay(5);
clk=1;
}
for(c=0;c<8;c++)
{
if(bet&0x80)
din=1;
else
din=0;
bet<<=1;
clk=0;
delay(5);
clk=1;
}
load=1;
}
void spi_init()
{ spi_write(ScanLimit,ScanDigit); // 设置扫描界限
spi_write(DecodeMode,DecodeDigit); // 设置译码模式
spi_write(Intensity,IntensityGrade); // 设置亮度
spi_write(ShutDown,NormalOperation); // 设置为正常工作模式
}
void main()
{
spi_init();
delay(2000);
while(1)
{
for(d=0;d<8;d++)
{
spi_write(table1[d],table[d]);
}
}
}
浙公网安备 33010602011771号