ch452L怎么和stc89c52连接啊?我做测试:用一个按键连1k电阻连seg,另一脚连dig。ch452L的dout接的单片机P3.2,din、load和dclk接的单片机三个引脚。然后vcc接正,GND接地,没有接电容。程序是这样的,具体按键值都没写,可是按键之后灯就是不变,希望有人能够帮助啊!#include #include #define uchar unsigned char #define uint unsigned char #define Light P0//sfr Light=0x80 void delay(uchar ms); /***********ch451接口和参数定义************/ sbit ch451_load = P2^6; //数据加载引脚 sbit ch451_din = P2^5; //数据输入引脚 sbit ch451_clk = P2^4; //时钟引脚 sbit ch451_dout = P3^2; //数据输输出引脚 uchar ch451_key_val=0xff; //按键初值设置(无效的按键值) void wr_ch451(uint com); void int_set(); void ch451_initial(); uchar a=0; void main() { Light=0x3c; int_set(); //设置中断相关的参数 ch451_initial(); //ch451初始化 wr_ch451(0x402); //设定ch451的系统参数(只使用按键扫描功能) while(1) { if(a!=0)//1011011 { Light++; } } } /********每次按键按下都会使ch451_dout引脚(P3.2)变为低电平,因此产生外中断*******/ void ch451_int() interrupt 0 using 1 { uchar i,com,key_val=0; EX0=0; //关中断0 com=0x07; //取按键值命令 ch451_load=0; //准备传送命令 for(i=0;i<4;i++) { ch451_din=com&0x01; ch451_clk=0; com>>=1; ch451_clk=1; //上升沿送入 } ch451_load=1; //加载命令 for(i=0;i<7;i++) { key_val<<=1; //先收到键值的高位 key_val|=ch451_dout; //读入键值 ch451_clk=0; //下降沿读入 ch451_clk=1; //为下一次做准备delayms(uint ms); //毫秒延时函数 } a=key_val; IE0=0; //清中断标志 EX0=1; //开中断 }
/***********中断设置函数***************/ void int_set() { TMOD=0x21; //0010 0001使用定时器T0的模式1(16位模式),定时器T1的模式2(8位模式) TH0=0; //设定初值 TL0=0; TR0=0; //暂时不启动定时器T0 /****************************************************/ TH1=256-13; //设定初值 TL1=256-13; PT1=1; //T1中断优先级设为高 TR1=0; //暂时不启动定时器T1 ET1=1; //开T1中断 /****************************************************/ IT0=1; //外中断0为负边沿触发方式 EX0=1; //开外中断INT0 /****************************************************/ IT1=1; //外中断1为负边沿触发方式 EX1=0; //暂时不使用外中断INT1(先关闭) EA=1; //开总中断 } /**********ch451初始化函数************/ void ch451_initial() { ch451_din = 0; //资料固定要求 ch451_din = 1; ch451_load = 1; ch451_clk = 1; } /********向ch451写入命令的函数********/ void wr_ch451(uint com) { uchar i; EX0=0; //关中断 ch451_load=0; //准备传送命令 for(i=0;i<12;i++) //向ch451送入命令(共12位,低位在前) { ch451_din=com&0x01; ch451_clk=0; com>>=1; ch451_clk=1; //上升沿送入 } ch451_load=1; //加载命令 EX0=1; //开中断 }