|
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);
}
}
|
最佳答案
查看完整內容
void SMG_Write_Byte (u8 dat,u8 dat1)有錯誤
|