久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2707|回復: 14
打印 上一主題 下一主題
收起左側

關于使用東軟軟件單片機點亮使用74HC595級聯數碼管程序問題

[復制鏈接]
跳轉到指定樓層
樓主
50黑幣
數碼管顯示亂碼,幫忙分析下原因:
#include "Led_Display.h"
//#include"smg.h"
#include <hic.h>
#include "delay.h"
const char smgduan[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽
//u16 smgduan[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽
//u16 smgduan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰
u8 DisPlayData[8];
u16 count;
u16 sec,min,hour;
//sbit SCL = (PA1);//時鐘脈沖信號——上升沿有效ST
//sbit RCL = (PA3);//打入信號————上升沿有效SH
//sbit DIO = (PA5);//串行數據入DS...............
/**************************************************************************************
****
****
****
****
***************************************************************************************/

void Smg_Init( )
{
    ANSL = 0xFF;        //選擇對應端口為數字IO功能
        ANSH = 0xFF;        //選擇對應端口為數字IO功能
    PAT = 0x00;         //所有IO設為輸出低電平
    PBT = 0x00;
    PCT = 0x00;
    PA = 0x00;
    PB = 0x00;
    PC = 0x00;
        //PB6=0;
}
/*************************************************************************************************
****函數名:                SMG_Write_Bite (u8 dat,u8 dat1)
****功能                        寫入數據
****
****
***************************************************************************************************/
void SMG_Write_Byte (u8 dat,u8 dat1)
{
        u8 i;
        for(i=0;i<8;i++)
        {
                //((dat<<i)&0x80)? DIO_HIGH:DIO_LOW;                                //        三目運算
                if((dat<<i)&0x80)
                {
                        DIO=1;
                }
                else
                {
                        DIO=0;
                }
                //SCL_HIGH;
                //SCL_LOW;
                SCL=1;
                //delay_us(10);
                //delay_ms(1);
                //delay(1);
                SCL=0;
        }
        for(i=0;i<8;i++)
        {
                //((dat1<<i)&0x80)? DIO_HIGH:DIO_LOW;                                //        三目運算
                //SCL_HIGH;
                //SCL_LOW;
                if((dat<<i)&0x80)
                {
                        DIO=1;
                }
                else
                {
                        DIO=0;
                }
                SCL=1;
                SCL=0;


        }
        
        //RCL_HIGH;
        //RCL_LOW;
        RCL=1;
        RCL=0;
        
}

void SMG_Number (u16 sec,u16 count)
{

//        {
//                SMG_Write_Byte (smgduan[((sec%1000)%100)%10],0x01);
                SMG_Write_Byte (smgduan[sec%10],0x01);
                //delay_ms(1);
                delay(1);
//                SMG_Write_Byte (smgduan[((sec%1000)%100)/10],0x02);
                SMG_Write_Byte (smgduan[sec/10],0x02);
                //delay_ms(1);
                delay(1);
//                SMG_Write_Byte (smgduan[(sec%1000)/100],0x04);
                SMG_Write_Byte (smgduan[min%10],0x04);
                //delay_ms(1);
                delay(1);
//                SMG_Write_Byte (smgduan[sec/1000],0x08);
                SMG_Write_Byte (smgduan[min/10],0x08);
                //delay_ms(1);
                delay(1);
//        }
//        if(sec>4500)
//        {
//                count++;
//                if(count>9999)
//                {
//                        count=0;
//                }
//        }
//                SMG_Write_Byte (smgduan[((count%1000)%100)%10],0x10);
                SMG_Write_Byte (smgduan[(hour%100)%10],0x10);
                delay(1);                                    
//                SMG_Write_Byte (smgduan[((count%1000)%100)/10],0x20);
                SMG_Write_Byte (smgduan[(hour%100)/10],0x20);
                delay(1);
//                SMG_Write_Byte (smgduan[(count%1000)/100],0x40);
                SMG_Write_Byte (smgduan[hour/100],0x40);
                delay(1);
                SMG_Write_Byte (smgduan[count],0x80);
                delay(1);
        
}
//
#ifndef _LED_DISPLAY_H
#define _LED_DISPLAY_H
#include <hic.h>
#include "typedef.h"


#define SCL  (PA0)//時鐘脈沖信號——上升沿有效ST
#define RCL  (PA6)//打入信號————上升沿有效SH
#define DIO  (PA7)//串行數據入DS...............

//typedef   unsigned  char   u8;
//typedef   unsigned  int    u16;
//typedef   unsigned  long   u32;

void        Smg_Init( void);
void        SMG_Number (u16 sec,u16 count);
void        SMG_Write_Byte (u8 dat,u8 dat1);


//typedef uint8_t  u8;

#endif


/*sample.c*/
#include <hic.h>
#include "Led_Display.h"
#include "delay.h"
/******************************************************
函數名:void RAMclear(void)
描  述:RAM區數據清零,RAM區地址0x0000~0x03FF
輸入值:無
輸出值:無
返回值:無
*******************************************************/
void RAMclear(void)
{
    for (IAAH=0; IAAH<=0x03; IAAH++)
    {
        for (IAAL=0; IAAL<0xFF; IAAL++)
            IAD = 0x00;
        IAD = 0x00;
    }
}

void main()
{
        Smg_Init( );
        //SMG_Number(1000,1000);
        while(1)
        {SMG_Number(1000,1000);
                //SMG_Number(1000,1000);
                //delay_ms(500);
                PB6=0;
                //delay_ms(500);
                delay(100);
                PB6=1;
                delay(100);
               
        }
}

51hei截圖_20231012193523.png (111.6 KB, 下載次數: 91)

74HC595級聯

74HC595級聯

最佳答案

查看完整內容

void SMG_Write_Byte (u8 dat,u8 dat1)有錯誤
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:384109 發表于 2023-10-12 19:37 | 只看該作者
void SMG_Write_Byte (u8 dat,u8 dat1)有錯誤
回復

使用道具 舉報

板凳
ID:143767 發表于 2023-10-13 10:06 | 只看該作者
東軟的軟件是什么軟件?
回復

使用道具 舉報

地板
ID:372579 發表于 2023-10-13 12:26 | 只看該作者
這個軟件還真沒用過,不過數碼管顯示亂,可能是引腳和程序不對,數碼管真值不對等等,要先查查硬件電路
回復

使用道具 舉報

5#
ID:332444 發表于 2023-10-13 14:04 | 只看該作者
代碼中用發送8個數據為一次,發送16個數據分為2次發送8個數據即可。
回復

使用道具 舉報

6#
ID:69038 發表于 2023-10-13 14:20 | 只看該作者
595這么友善的器件,一般是不會有問題的,即使有問題,單步跟蹤一下,基本上就能排除問題了。
回復

使用道具 舉報

7#
ID:61632 發表于 2023-10-13 16:42 | 只看該作者
dj3365191 發表于 2023-10-13 10:06
東軟的軟件是什么軟件?

iDesigner4.1這個軟件,國產的MCU,想學習學習
回復

使用道具 舉報

8#
ID:61632 發表于 2023-10-13 16:45 | 只看該作者
xianfajushi 發表于 2023-10-13 14:04
代碼中用發送8個數據為一次,發送16個數據分為2次發送8個數據即可。

我也感覺是void SMG_Write_Byte (u8 dat,u8 dat1)這段代碼里出現問題了,因為這個是我STM32里用過的,移植修改的,結果出現了亂碼。感謝你的建議,后面會按照你的想法測試一下。
回復

使用道具 舉報

9#
ID:61632 發表于 2023-10-13 16:47 | 只看該作者
aide51 發表于 2023-10-13 12:26
這個軟件還真沒用過,不過數碼管顯示亂,可能是引腳和程序不對,數碼管真值不對等等,要先查查硬件電路

74HC595級聯的數碼管是一個成品模塊;不存在問題;引腳的設置,也沒有問題。
回復

使用道具 舉報

10#
ID:69038 發表于 2023-10-13 17:06 | 只看該作者
595的SDA數據是在SCK的上升沿才鎖存的,所以,你把SMG_Write_Byte 中的SCL=1;SCL=0調一下?
//595送出串行數據
void send_595(char dat)        //595發送1字節數據
{
    char count1;               //位計數器,單字節為8位
        for (count1=8;count1>0;count1--)
          {       
                hc595_sda=dat & 0x01;  //取最低位數據做為串行數據位,低位先發,若高位先發,則dat & 0x80
                hc595_sck=0;           //置SCK為低
                Delay10us();           //延時
                hc595_sck=1;               //置SCK為高
                Delay10us();               //延時,輸出一個位的數據
                dat>>=1;               //數據右移,下一個位的數據,若高位先發則dat<<=1
          }
}
回復

使用道具 舉報

11#
ID:332444 發表于 2023-10-13 17:12 | 只看該作者
我今天回復了個挺好玩的16燈逐一點亮,注意代碼中的10和18的值,讓大家娛樂鑒賞,電路圖就不提供了吖,其實提問16等和切換的不少,這里就都有了吖。

1.png (19.63 KB, 下載次數: 86)

1.png
回復

使用道具 舉報

12#
ID:1095802 發表于 2023-10-14 09:52 | 只看該作者
xianfajushi 發表于 2023-10-13 17:12
我今天回復了個挺好玩的16燈逐一點亮,注意代碼中的10和18的值,讓大家娛樂鑒賞,電路圖就不提供了吖,其實 ...

這個SY,MY好像都沒啥作用啊
回復

使用道具 舉報

13#
ID:332444 發表于 2023-10-14 20:20 | 只看該作者
殿堂之上 發表于 2023-10-14 09:52
這個SY,MY好像都沒啥作用啊

有用無用不是紙上談兵,實際試看就知道了。而且,鑒賞也需要會,這個代碼其實未優化,也是很有意思的,能同步卻也能完成16燈。
回復

使用道具 舉報

14#
ID:61632 發表于 2023-10-17 16:08 | 只看該作者
zhuls 發表于 2023-10-13 17:06
595的SDA數據是在SCK的上升沿才鎖存的,所以,你把SMG_Write_Byte 中的SCL=1;SCL=0調一下?
//595送出串 ...

很感謝你的建議
回復

使用道具 舉報

15#
ID:61632 發表于 2023-10-17 16:17 | 只看該作者
非常感謝大家的積極幫助和建議,我在這邊把我的結果奉上:
數碼管顯示亂碼,幫忙分析下原因:
#include "Led_Display.h"
//#include"smg.h"
#include <hic.h>
#include "delay.h"
const char smgduan[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽
//u16 smgduan[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽
//u16 smgduan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰
u8 DisPlayData[8];
u16 count;
u16 sec,min,hour;
//sbit SCL = (PA1);//時鐘脈沖信號——上升沿有效ST
//sbit RCL = (PA3);//打入信號————上升沿有效SH
//sbit DIO = (PA5);//串行數據入DS...............
/**************************************************************************************
****
****
****
****
***************************************************************************************/

void Smg_Init( )
{
    ANSL = 0xFF;        //選擇對應端口為數字IO功能
        ANSH = 0xFF;        //選擇對應端口為數字IO功能
    PAT = 0x00;         //所有IO設為輸出低電平
    PBT = 0x00;
    PCT = 0x00;
    PA = 0x00;
    PB = 0x00;
    PC = 0x00;
        //PB6=0;
}
/*************************************************************************************************
****函數名:                SMG_Write_Bite (u8 dat,u8 dat1)
****功能                        寫入數據
****
****
***************************************************************************************************/
void SMG_Write_Byte (u8 dat,u8 dat1)
{
        u8 i;
        for(i=0;i<8;i++)
        {
                //((dat<<i)&0x80)? DIO_HIGH:DIO_LOW;                                //        三目運算
                if((dat<<i)&0x80)
                {
                        DIO=1;
                }
                else
                {
                        DIO=0;
                }
                //SCL_HIGH;
                //SCL_LOW;
                SCL=1;
                //delay_us(10);
                //delay_ms(1);
                //delay(1);
                SCL=0;
        }
        for(i=0;i<8;i++)
        {
                //((dat1<<i)&0x80)? DIO_HIGH:DIO_LOW;                                //        三目運算
                //SCL_HIGH;
                //SCL_LOW;
                if((dat1<<i)&0x80)//這個原寫成dat,修改成dat1;
                {
                        DIO=1;
                }
                else
                {
                        DIO=0;
                }
                SCL=1;
                SCL=0;


        }
        
        //RCL_HIGH;
        //RCL_LOW;
        RCL=1;
        RCL=0;
        
}

void SMG_Number (u16 sec,u16 count)
{

        {
                SMG_Write_Byte (smgduan[((sec%1000)%100)%10],0x01);//數碼管顯示公式進行了更改
                delay(1);
                SMG_Write_Byte (smgduan[((sec%1000)%100)/10],0x02);
                delay(1);
                SMG_Write_Byte (smgduan[(sec%1000)/100],0x04);
                delay(1);
                SMG_Write_Byte (smgduan[sec/1000],0x08);
                delay(1);
        }
//        if(sec>4500)
//        {
//                count++;
//                if(count>9999)
//                {
//                        count=0;
//                }
//        }
//                SMG_Write_Byte (smgduan[((count%1000)%100)%10],0x10);
//                 SMG_Write_Byte (smgduan[(hour%100)%10],0x10);
//                delay(1);                                    
//                SMG_Write_Byte (smgduan[((count%1000)%100)/10],0x20);
//                 SMG_Write_Byte (smgduan[(hour%100)/10],0x20);
//                delay(1);
//               SMG_Write_Byte (smgduan[(count%1000)/100],0x40);
//                 SMG_Write_Byte (smgduan[hour/100],0x40);
//                 delay(1);
//                 SMG_Write_Byte (smgduan[count],0x80);
//                 delay(1);
        
}

#ifndef _LED_DISPLAY_H
#define _LED_DISPLAY_H
#include <hic.h>
#include "typedef.h"


#define SCL  (PA0)//時鐘脈沖信號——上升沿有效ST
#define RCL  (PA6)//打入信號————上升沿有效SH
#define DIO  (PA7)//串行數據入DS...............

//typedef   unsigned  char   u8;
//typedef   unsigned  int    u16;
//typedef   unsigned  long   u32;

void        Smg_Init( void);
void        SMG_Number (u16 sec,u16 count);
void        SMG_Write_Byte (u8 dat,u8 dat1);


//typedef uint8_t  u8;

#endif


/*sample.c*/
#include <hic.h>
#include "Led_Display.h"
#include "delay.h"
/******************************************************
函數名:void RAMclear(void)
描  述:RAM區數據清零,RAM區地址0x0000~0x03FF
輸入值:無
輸出值:無
返回值:無
*******************************************************/
void RAMclear(void)
{
    for (IAAH=0; IAAH<=0x03; IAAH++)
    {
        for (IAAL=0; IAAL<0xFF; IAAL++)
            IAD = 0x00;
        IAD = 0x00;
    }
}

void main()
{
        Smg_Init( );
        //SMG_Number(1000,1000);
        while(1)
        {SMG_Number(1000,1000);
                //SMG_Number(1000,1000);
                //delay_ms(500);
                PB6=0;
                //delay_ms(500);
                delay(100);
                PB6=1;
                delay(100);
               
        }
}

//結果更改成這樣之后,數碼管顯示正常,完全OK

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91玖玖| 久久久精 | 一区二区三区国产视频 | 人人爱干| 美日韩视频| 亚洲精品一区二区 | 99re视频 | 亚洲天堂久久 | 国产第一页在线播放 | 91精品一区二区三区久久久久 | 一区二区三区四区免费观看 | 欧美精品网 | 亚洲一区二区免费视频 | av一区二区三区四区 | 国产片侵犯亲女视频播放 | 国产精品国产精品 | 久久青视频 | 国产aa| 欧美日韩在线播放 | 成人性生交大片免费看中文带字幕 | 国产精品免费播放 | 日美女逼逼 | 亚洲欧美另类在线观看 | 成人免费视频观看 | 在线视频一区二区 | 久久久在线视频 | 中文精品视频 | 成人精品鲁一区一区二区 | 日韩一区二区av | 国产福利二区 | 久久精品国产久精国产 | 亚洲第一黄色网 | 男女午夜激情视频 | 国产成人免费在线 | 亚洲精品白浆高清久久久久久 | 偷派自拍 | www.日韩系列 | 欧美成人免费在线视频 | 成人午夜精品 | 国产亚洲精品综合一区 | 日韩一区二区视频 |