动态数码管的显示,由浅入深,原理
(一)视觉暂留:
code存储在程序存储器里,表示只读,不加code的数组存在内存里可读可写。
#include"reg52.h"
typedef signed char int8;
typedef signed int int16;
typedef signed long int32;
typedef unsigned char uint8; //字符型
typedef unsigned int uint16;
typedef unsigned long uint32;
sbit duanxuan=P2^5; //段选控制数字显示
sbit weixuan=P2^6; //位选控制有几个或者第几个显示数字
sbit JDQ = P2 ^ 0;
sbit SHIFT_CLOCK_595 = P1 ^ 4;
sbit data_A_595 = P1 ^ 0;
sbit LATCH_CLOCK_595 = P2 ^ 3;
//自加变量,用来测试编码表
uint8 zifu_test; //用来计数
uint8 zifu_test2;
uint8 code zifu2[19]={
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0X89,0X7F,0XBF};
uint8 code zifu[16]={
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78, 0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
void delay(uint16 x_ms) //延时毫秒
{
uint16 i,j;
for(i=x_ms;i>0;i--)
for(j=114;j>0;j--);
}
void xp74H595(uint16 dat)
{
uint16 i;
for (i = 0; i < 8; i++)
{
data_A_595 = (dat << i) & 0X80;
SHIFT_CLOCK_595 = 0; //时钟上升沿
SHIFT_CLOCK_595 = 1;
}
LATCH_CLOCK_595 = 0; //给锁存器脉冲,上升沿
LATCH_CLOCK_595 = 1