- 打卡等级:以坛为家I
- 打卡总天数:223
- 最近打卡:2025-05-01 13:11:52
高级会员
- 积分
- 985
|
发表于 2025-1-22 17:10:37
|
显示全部楼层
[code]关于数码管显示问题,提问
目的是想让数码管右边第一位单独显示一个数字3,但是数码管全部显示3
如图
程序如下
/*---------------------------------------------------------------------*/
/*---------------------------------------------------------------------*/
#include "stdio.h"
#include <STC15H.H>
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define FOSC 11059200L
#define T1MS (65536-FOSC/1000) //1Tģʽ
#define DIS_DOT 0x20
#define DIS_BLACK 0x10
#define DIS_ 0x11
/************* ±¾µØ³£Á¿ÉùÃ÷ **************/
u8 code t_display[]={ //±ê×¼×Ö¿â
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black - H J K L N o P U t G Q r M y
0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //λÂë
/************* IO¿Ú¶¨Òå **************/
sbit DS = P2^3; //pin 14 SER data input ´®ÐÐÊý¾ÝÊäÈë DS
sbit ST_CP = P2^6; //pin 12 RCLk store (latch) clock ´æ´¢¼Ä´æÆ÷ʱÖÓÊäÈë / ST_CP
sbit SH_CP = P2^5; //pin 11 SRCLK Shift data clock ÒÆÎ»¼Ä´æÆ÷ʱÖÓÊäÈë //SH_CP
/************* ±¾µØ±äÁ¿ÉùÃ÷ **************/
u8 LED8[8]; //ÏÔʾ»º³å
u8 display_index; //ÏÔʾλË÷Òý
bit B_1ms; //1ms±êÖ¾
/************* ±¾µØº¯ÊýÉùÃ÷ **************/
void Delay500ms(void); //@11.0592MHz
void Delay5ms(void); //@11.0592MHz
void Send_595(u8 dat);
void DisplayScan(void);
void Display();
void move(void);
void clock(void);
void WriteLED(u8 SEG,u8 DIG);
/**************** Íⲿº¯ÊýÉùÃ÷ºÍÍⲿ±äÁ¿ÉùÃ÷ *****************/
/******************** Ö÷º¯Êý **************************/
void main(void)
{
u8 i,k;
P0M1 = 0x00; P0M0 = 0x00; //ÉèÖÃΪ׼˫Ïò¿Ú
P1M1 = 0x00; P1M0 = 0x00; //ÉèÖÃΪ׼˫Ïò¿Ú
P2M1 = 0x00; P2M0 = 0x00; //ÉèÖÃΪ׼˫Ïò¿Ú
P3M1 = 0x00; P3M0 = 0x00; //ÉèÖÃΪ׼˫Ïò¿Ú
P4M1 = 0x00; P4M0 = 0x00; //ÉèÖÃΪ׼˫Ïò¿Ú
P5M1 = 0x00; P5M0 = 0x00; //ÉèÖÃΪ׼˫Ïò¿Ú
AUXR |= 0x80; //¶¨Ê±Æ÷0Ϊ1Tģʽ
TMOD = 0x00; //ÉèÖö¨Ê±Æ÷Ϊģʽ0(16λ×Ô¶¯ÖØ×°ÔØ)
TL0 = T1MS; //³õʼ»¯¼ÆÊ±Öµ
TH0 = T1MS >> 8;
TR0 = 1; //¶¨Ê±Æ÷0¿ªÊ¼¼ÆÊ±
ET0 = 1; //ʹÄܶ¨Ê±Æ÷0ÖжÏ
EA = 1; //´ò¿ª×ÜÖжÏ
display_index = 0;
while(1)
{
// if(B_1ms) //1msµ½
// {
// B_1ms = 0;
//// LED8[0] = 10; //ÏÔʾA
//// LED8[1] = 1;
//
// }
WriteLED(0x4F,0x01);//3
}
}
void move(void)
{
SH_CP=0;
_nop_();
SH_CP=1;
_nop_();
}
void clock(void)
{
ST_CP=0;
_nop_();
ST_CP=1;
_nop_();
ST_CP=0;
}
/**************** ÏòHC595·¢ËÍÒ»¸ö×Ö½Úº¯Êý ******************/
void Send_595(u8 dat)
{
u8 i;
for(i=0; i<8; i++)
{
if(dat&0x80)
DS = 1;
else
DS = 0;
move();
dat <<= 1;
}
}
void WriteLED(u8 SEG,u8 DIG)
{
Send_595(DIG); //¿ØÖÆÎ»Ñ¡
Send_595(SEG); //¿ØÖƶÎÏÔ
clock();
}
/********************** ÏÔʾɨÃ躯Êý ************************/
void DisplayScan(void)
{
// Send_595(t_display[LED8[display_index]]); //Êä³ö¶ÎÂë
// Send_595(~T_COM[display_index]); //Êä³öλÂë
// P_HC595_RCLK = 1;
//
// P_HC595_RCLK = 0;
// if(++display_index >= 8) display_index = 0; //8λ½áÊø»Ø0
}
/********************** ÑÓʱɨÃ躯Êý ************************/
void Delay500ms(void) //@11.0592MHz
{
unsigned char data i, j, k;
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay5ms(void) //@11.0592MHz
{
}
/********************** Timer0 1msÖжϺ¯Êý ************************/
void timer0 (void) interrupt 1
{
}
|
-
|