- 打卡等级:以坛为家I
- 打卡总天数:279
- 最近打卡:2026-03-31 10:56:10
已绑定手机
金牌会员
- 积分
- 1138
|
发表于 2026-2-4 08:30:32
|
显示全部楼层
#include <STC8H.H>
sbit P_COM1 = P3^3; //推挽输出
sbit P_COM2 = P3^4; //推挽输出
sbit P_COM3 = P3^5; //推挽输出
sbit P_SEGA = P2^5; //推挽输出
sbit P_SEGB = P2^7; //推挽输出
sbit P_SEGC = P2^1; //推挽输出
sbit P_SEGD = P2^3; //推挽输出
sbit P_SEGE = P2^4; //推挽输出
sbit P_SEGF = P2^6; //推挽输出
sbit P_SEGG = P2^0; //推挽输出
sbit P_SEGH = P2^2; //推挽输出
unsigned char code t_display[]={
0x40, /* 0 */
0x79, /* 1 */
0x24, /* 2 */
0x30, /* 3 */
0x19, /* 4 */
0x12, /* 5 */
0x02, /* 6 */
0x78, /* 7 */
0x00, /* 8 */
0x10, /* 9 */
0x08, /* 10 */
0x03, /* 11 */
0x46, /* 12 */
0x21, /* 13 */
0x06, /* 14 */
0x0e, /* 15 */
0x3f, /* "-", */
0x7f, /* " " */
};
unsigned char Dis_Index =0;
unsigned char LED_Tmp[3]= {17,17,17};
void SEG_Init()
{
P3M0 |= 0x38; P3M1 &= ~0x38;
P2M0 = 0xff; P2M1 = 0x00;
P_COM1 = 0;
P_COM2 = 0;
P_COM3 = 0;
}
void Display_Scan()
{
P_COM1 = 0;P_COM2 = 0;P_COM3 = 0;
if(++Dis_Index >= 4)
{
Dis_Index = 0;
if(Dis_Index < 3)
{
B = t_display[LED_Tmp[Dis_Index]];
P_SEGA = B0; P_SEGB = B1; P_SEGC = B2; P_SEGD = B3;
P_SEGE = B4; P_SEGF = B5; P_SEGG = B6; P_SEGH = B7;
if(Dis_Index == 0) P_COM1 = 1;
else if(Dis_Index == 1) P_COM2 = 1;
else P_COM3 = 1;
}
}
}
#include <STC8H.H>
#include "SEG.H"
unsigned int cnt;
unsigned char sec;
void Timer0_Init(void) //1毫秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x30; //设置定时初始值
TH0 = 0xF8; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
void main(void)
{
P_SW2 |= 0x80; //访问XSFR
P0M1 = 0; P0M0 = 0;
P1M1 = 0; P1M0 = 0;
P2M1 = 0; P2M0 = 0;
P3M1 = 0; P3M0 = 0;
P4M1 = 0; P4M0 = 0;
P5M1 = 0; P5M0 = 0;
P6M1 = 0; P6M0 = 0;
P7M1 = 0; P7M0 = 0;
SEG_Init();
Timer0_Init();
EA = 1;
while(1)
{
LED_Tmp[0] = sec%10;
LED_Tmp[1] = sec/10%10;
LED_Tmp[2] = sec/100%10;
}
}
void Timer0_Isr(void) interrupt 1
{
Display_Scan();
if(++cnt == 1000)
{
cnt = 0;
sec ++;
if(sec>=150)
sec = 0;
}
}
#include <STC8H.H>
#include "SEG.H"
unsigned int cnt;
unsigned char sec;
void Timer0_Init(void) //1毫秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x30; //设置定时初始值
TH0 = 0xF8; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
我的数码管显示函数只能显示一位数码管,其它两位不会显示,请大神们帮忙看看 |
|