本帖最后由 芯圣电子官方QQ 于 2023-7-24 15:28 编辑
HC89F003开发板套件在3月6号晚就收到了,但近段时间公司忙现在才有时间,我收到的套件有10片HC89F003比大家多了5片好开心。但不幸的是HC89F003开发板可能和《ddllxxrr》的《HC89S003F4到了,遇到点问题》贴子遇到一样的问题。刚好我有《SSOP28转DIP的板》就手工用拖焊上焊芯片。刚好前段时间做点焊机有一块4位的LED数码管,用74LS164加9015驱动的,原用89C2051做的。看了一下HC89F003例程, 在原程序上加上设置好内部高频其他就按原来的进行编译,下载运行,LED不显示??? 用单步调试IO为本该为低电平的,但实际是有电压,不对阿,再看HC89F003的数据手册IO的默认模式为模拟输入,找到问题了,我想当然的用老AT51思维没看HC89F003的数据手册,没设置IO模式。 啊、啊、啊、最后加上IO为开漏带上拉输出就行了。 最后我的使用心得就是不要想当然,多看看数据手册吧!!!
- /***
- ------------------------------__-----------------------------
- --| INT8/AN8/P2.0 P0.7/AN7/INT7|--
- --| INT5/AN5/P0.5 P0.6/AN6/INT6|--
- --| Vref/INT4/AN4/P0.4 P2.1/AN9/INT9|--
- --| INT3/AN3/P0.3 P2.2/AN10/INT10|--
- --| FLT2/INT2/AN2/P0.2 P2.3/TDI/INT11|--
- --| FLT1/INT1/AN1/P0.1 P2.4/TDO/INT12|--
- --| GND P2.5/TCK/INT13|--
- --| FLT0/INT0/AN0/P0.0 P2.6/TMS/INT14/PLVD|--
- --| VCC P2.7/RST/INT15|--
- --| XOUT/P1.1 P1.0/XIN|--
- --------------------------------------------------------------
- ***/
- #define ALLOCATE_EXTERN
- #include "HC89S003F4.h"
- #include <intrins.h> //_nop_();
-
- //7段管字模 0 1 2 3 4 5 6 7 8 9 不显
- uchar code Table [11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
- /***Led显示缓存 *******************/
- u8 disp[5]={0x0, //对应左起4位 对应右起1位 设置
- 0x1, //对应左起3位 对应右起2位 设置
- 0x5, //对应左起2位 对应右起3位 设置
- 0x9, //对应左起1位 对应右起4位 设置
- 0x04, //DP位设低4位有效为1则显示 0位为右1位
- };
- //**************IO分配******************************************//
- sbit b1b=P0^4; //b1+ //数码管共阳极驱动
- sbit b2b=P0^3; //b2+
- sbit b3b=P0^2; //b3+
- sbit b4b=P0^1; //b4+
- sbit CLK=P0^7; //74LS164_8PIN
- sbit SDA=P0^6; //74LS164_1/2PIN
-
-
- void TIMER_init()
- {
- TCON1 = 0x00; //Tx0定时器时钟为Fosc
- TMOD = 0x00; //16位重装载定时器/计数器
- TH0 = 0xF5;
- TL0 = 0x95; //T0定时时间2ms
- IE |= 0x02; //打开T0中断
- TCON |= 0x10; //使能T0
- EA = 1; //打开总中断
- }
- void GPIO_init()
- {
- // P2M0 = P2M0&0xf0|0x0E; //P20设置开漏带上拉输出
- P0M3=0XEE; //P06;P07设置开漏带上拉输出
- P0M2= P0M0&0XF0|0X0e; //P04设置开漏带上拉输出
- P0M1=0XEE; //P02;P03设置开漏带上拉输出
- P0M0= P0M0&0X0F|0XE0; //P01设置开漏带上拉输出
- }
- void main(void)
- {
-
- while((CLKCON&0x20)!=0x20); //等待内部高频RC起振
- CLKSWR = 0x51; //选择内部高频时钟为主时钟,内部高频RC0分频,Fosc=32MHz
- while((CLKSWR&0xC0)!=0x40); //等待内部高频切换完成
- CLKDIV = 0x01; //Fosc2分频得到Fcpu,Fcpu=16MHz
-
-
- WDTCCR = 0x00; //关闭看门狗 必须要关闭,默认是打开的
- GPIO_init();
- TIMER_init();
- while(1);
- }
- void TIMER0_Rpt(void) interrupt TIMER0_VECTOR
- {
- static u8 Channel; //LED当前显示通道
- u8 i,u8Disp;
-
- u8Disp=Table[disp[Channel]];
- switch (Channel)
- { case 0: //对应数码管右起1位
- { if(disp[4]&1)
- u8Disp &=0x7f; //设置DP小数点
- b1b=1;b2b=1;b3b=1;b4b=0;
- break;
- }
-
- case 1: //对应数码管右起2位
- { if(disp[4]&2)
- u8Disp &=0x7f; //设置DP小数点
- b1b=1;b2b=1;b3b=0;b4b=1;
- break;
- }
- case 2:
- { if(disp[4]&4)
- u8Disp &=0x7f; //设置DP小数点
- b1b=1;b2b=0;b3b=1;b4b=1;
- break;
- }
- case 3:
- { if(disp[4]&8)
- u8Disp &=0x7f; //设置DP小数点
- b1b=0;b2b=1;b3b=1;b4b=1;
- break; //*/
- }
- }
- for(i=0;i<8;i++)
- { u8Disp<<=1;SDA=CY;
- CLK=1;
- _nop_(); _nop_(); _nop_(); _nop_();
- CLK=0;
- }
-
- Channel++;
- if(Channel==4)
- Channel=0;
-
- }
|