CH423样品收到后 网站源码不对还是?

你好 贵司CH423 样品已经收到 用网站源码下载程序 全部显示8和小数点 并伴有闪烁 看不清数字 不知道什么原因 还有一点 关闭电源后再开启电源 数码管没有任何显示了 必须重新进行ISP下载 才会出现全显示8和小数点 开始闪烁 单片机AMEGA16L GCCAVR环境 不知道怎么会出现这个问题 急 望解决! 福州昌华动力 小任

晶振为高速4M外部晶振 //本例子程序提供操作方法,仅供参考 // ******************************************************************* // Website: http://wch.cn // Email: tech@wch.cn // Author: TECH 2008.11.25 // *******************************************************************

//ATMEGA16 PC0 ------- CH423 SCL //ATMEGA16 PC1 ------- CH423 SDA

//ICCAVR下编译

// ************************************** // 加载头文件 // ************************************** #include

// ************************************** // CH423定义 // ************************************** #define CH423_SDA_OUT { DDRD |= (1<#define CH423_SDA_IN { PORTD |= (1<#define CH423_SDA_SET PORTD |= (1<#define CH423_SDA_CLR PORTD&=~(1<#define CH423_SDA ( PIND & (1<#define CH423_SCL_OUT { PORTD |= (1<#define CH423_SCL_SET PORTD |= (1<#define CH423_SCL_CLR PORTD &= ~(1<#define DELAY { asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");}

// ************************************** // 延时毫秒,不准 // ************************************** void mDelaymS( unsigned int ms ) // 延时毫秒,不准 { unsigned int i; while ( ms -- ) { for( i = 0; i != 3000; i++ ); } }

// ************************************** // BCD码表 // ************************************** const unsigned int BCD_decode_tab[ 29 ] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F, 0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71, 0x00, 0x46, 0x40, 0x41, 0x39, 0x0F, 0x08, 0x76, 0x38, 0x73, 0x80, 0xFF, 0x00 };

// ************************************** // I2C START // ************************************** void CH423_I2c_Start( void ) { CH423_SDA_SET; /*发送起始条件的数据信号*/ CH423_SDA_OUT; /* 设置SDA为输出方向 */ DELAY; CH423_SCL_SET;/* 设置SCL为输出方向 */ DELAY; CH423_SDA_CLR; /*发送起始信号*/ DELAY; CH423_SCL_CLR; /*钳住I2C总线,准备发送或接收数据 */ DELAY; }

// ************************************** // I2C STOP // ************************************** void CH423_I2c_Stop( void ) { CH423_SDA_CLR; CH423_SDA_OUT; /* 设置SDA为输出方向 */ DELAY; CH423_SCL_SET; DELAY; CH423_SDA_SET; /*发送I2C总线结束信号*/ DELAY; CH423_SDA_IN; /* 设置SDA为输入方向 */ DELAY; }

// ************************************** // I2C 写一个字节 // ************************************** void CH423_I2c_WrByte( unsigned int c ) //写一个字节数据 { unsigned int i; CH423_SDA_SET; CH423_SDA_OUT; /* 设置SDA为输出方向 */ DELAY; for( i = 0; i != 8; i++ ) { if( c & 0x80 ) { CH423_SDA_SET; } else { CH423_SDA_CLR; } DELAY; CH423_SCL_SET; c <<= 1; DELAY; CH423_SCL_CLR; } CH423_SDA_IN; /* 设置SDA为输入方向 */ DELAY; CH423_SCL_SET; DELAY; CH423_SCL_CLR; DELAY; }

// ************************************** // I2C 读一个字节 // ************************************** unsigned int CH423_I2c_RdByte( void ) //读一个字节数据 { unsigned int c, i; CH423_SDA_IN; /* 设置SDA为输入方向 */ c = 0; for( i = 0; i != 8; i++ ) // 输入8位数据 { CH423_SCL_SET; DELAY; c <<= 1; if( CH423_SDA ) c++; // 输入1位 CH423_SCL_CLR; DELAY; } CH423_SDA_SET; CH423_SDA_OUT; CH423_SCL_SET; // 发出无效应答 DELAY; CH423_SCL_CLR; DELAY; return(c); }

// ************************************** // CH423写命令 // ************************************** void CH423_Write( unsigned int command ) //写命令 { CH423_I2c_Start(); /*启动总线*/ CH423_I2c_WrByte( (unsigned int)(command>>8) ); CH423_I2c_WrByte( (unsigned int)command ); /*发送数据*/ CH423_I2c_Stop(); /*结束总线*/ }

// ************************************** // CH423初始化 // ************************************** void CH423_Init( void ) { CH423_SCL_OUT; CH423_SDA_SET; CH423_SDA_OUT; }

void Clear( void )//清除显示 { CH423_Write( 0x6000 ); CH423_Write( 0x6200 ); CH423_Write( 0x6400 ); CH423_Write( 0x6600 ); CH423_Write( 0x6800 ); CH423_Write( 0x6A00 ); CH423_Write( 0x6C00 ); CH423_Write( 0x6E00 ); CH423_Write( 0x7000 ); CH423_Write( 0x7200 ); CH423_Write( 0x7400 ); CH423_Write( 0x7600 ); CH423_Write( 0x7800 ); CH423_Write( 0x7A00 ); CH423_Write( 0x7C00 ); CH423_Write( 0x7E00 ); }

// ************************************** // 主函数 // ************************************** int main( void ) { unsigned int count = 0; unsigned int dot = 0; unsigned int val; PORTD=0xFF; DDRD=0xFF; CH423_Init(); CH423_Write( 0x4800 | 0x17 );//启用数码管自动扫描功能 Clear();//清除显示

while(1) { val = BCD_decode_tab[count] | dot; CH423_Write( 0x6000 | val ); //16位数码管显示 CH423_Write( 0x6200 | val ); CH423_Write( 0x6400 | val ); CH423_Write( 0x6600 | val ); CH423_Write( 0x6800 | val ); CH423_Write( 0x6A00 | val ); CH423_Write( 0x6C00 | val ); CH423_Write( 0x6E00 | val ); CH423_Write( 0x7000 | val ); CH423_Write( 0x7200 | val ); CH423_Write( 0x7400 | val ); CH423_Write( 0x7600 | val ); CH423_Write( 0x7800 | val ); CH423_Write( 0x7A00 | val ); CH423_Write( 0x7C00 | val ); CH423_Write( 0x7E00 | val ); if( count != 15 ) count++; else { count = 0; if( dot == 0 ) dot = 0x80; else dot = 0; } mDelaymS( 250); mDelaymS( 250); }

}


SORRY 是我太粗心了 GCCAVR不支持for( i = 0; i != 3000; i++ );这样写 原来 改为如下 就OK for( i = 0; i != 3000; i++ )asm("nop"); 可以显示0-F了 但是 关掉电源再开电源 数码管没有任何显示 不知道为何 必须重新下载程序 一次 才又显示


个人认为是不是CH423启动时间比单片机要长 所以改了单片机的启动延时 问题解决了 谢谢 也许还有问题 到时候望指教了


您好,CH423是内置了上电复位电路,由电源检测产生的复位时间大约为30Ms,所以在发送CH423命令之前要加上电延迟。


只有登录才能回复,可以选择微信账号登录