📄 hanshu.c
字号:
/*----------------------------------------------------------------------------------------------
07.6.30
共阳数码管接法见资料本,暂为整理添加
-----------------------------------------------------------------------------------------------*/
#include <STC12C5410.H>
#include <intrins.h>
//#include <port.h>
//共阳段码表,按顺序接A-QA,B-QB
//字节的高位对应数码管的H段,依次类推
/*static unsigned char code Dig_Tab[19]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90//0-9共阳段码表
,0x88,0x82,0xc6,0xa1,0x84,0x8e //a-f共阳段码表
,0x89,0xc7,0xB7}; //H L = 共阳段码表*/
//8段共阳接法LED显示表,从底到高依次为b-g-c-h-d-e-a-f,
// unsigned char code LED_Tab[9]={0xFF, //灭灯
// 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; //从低到高指示1-8级
sbit SDATA_595 = P2^7 ; /*串行数据输入*/
sbit SCLK_595 = P3^7; /*移位时钟脉冲*/
sbit RCK_595 = P2^6; /*输出锁存器控制脉冲*/
unsigned char code LED_Tab[9]={0xFF, //灭灯
0xfd,0xBF,0xfb,0x7f,0xF7,0xef,0xfe,0xdf}; //从低到高指示1-8级
//共阳数码管段码表,连线如上所注释
unsigned char code Duan_Tab[10]={0x50,0x5f,0x31,0x15,0x1e,0x94,0x90,0x5d,0x10,0x14};//0-9
//待显示内容的位码表
unsigned char code Wei_Tab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/*-------------------------------------------------------------------------------
向74595输出一字节数据子程序
---------------------------------------------------------------------------------*/
static void WR_595(unsigned char data num2 )
{
unsigned char data count1;
for(count1=0;count1<=7;count1++){
if((num2&0x80)==0x80) //最高位为1,则向SDATA_595发送1
SDATA_595=1; //发出数据的最高位
else
SDATA_595=0;
num2<<=1; //右移位
SCLK_595=0; //产生上生沿
_nop_();
_nop_();
SCLK_595=1;
}
}
/*-------------------------------------------------------------------------------
打开锁存,更新74595输出子程序
---------------------------------------------------------------------------------*/
void Out_595(void)
{
RCK_595=0;
_nop_();
_nop_();
RCK_595=1; /*上升沿锁存数据*/
}
/*--------------------------------------------------------------------------------------
显示函数
----------------------------------------------------------------------------------------*/
void Led_Display(unsigned char data Buffer[])
{
unsigned char count=0;
for(count=0;count<8;count++)
{
if(count<2){
WR_595(Wei_Tab[count]);
WR_595(LED_Tab[Buffer[count]]);
Out_595();
}
else{
WR_595(Wei_Tab[count]);
if(count==3||count==6)
WR_595(Duan_Tab[Buffer[count]] & 0xEF);
else
WR_595(Duan_Tab[Buffer[count]]);
Out_595();
}
}
WR_595(Wei_Tab[1]);
WR_595(LED_Tab[Buffer[1]]);
Out_595();
}
void Led_Init(void)
{
WR_595(0xff);
WR_595(0xff);
Out_595();
}
void main(void)
{while(1)
{ WR_595(Wei_Tab[0x10]);
WR_595(LED_Tab[0xef]);
Out_595();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -