您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 深圳天微1721驱动
/**版权信息:深圳天微技术部*文件名:TM1721*当前版本:1.0*单片机型号:AT89S52*开发环境:KeiluVision3*晶震频率:12M*作者:李建文*完成日期:2008-6-19*功能:按键控制LCD屏显示0-9;以及全屏显示和全灭。*/#includereg52.h#includeintrins.h#definenop_nop_();#defineucharunsignedchar#defineuintunsignedint#definevoiddelay_ms(ucharcyc);sbitstb=P1^0;//定义片选通讯口sbitclk=P1^1;//定义时钟通讯口sbitdio=P1^2;//定义数据输入/输出通讯口bdataunsignedchary=0;//定义可以位寻址全局变量ysbity7=y^7;unsignedcharm,d,e,i;unsignedcharw[4]={0xff,0xff};//------写数据给IC----------voidwrite(ucharwr_data){uchari;stb=0;//给有效的片选信号(片选信号是低电平有效)nop;nop;for(i=0;i8;i++)//开始传送8位数据,每循环一次传送一位数据{clk=0;nop;nop;//delay_ms(200);wr_data=1;//移位数据,低位在前!nop;dio=CY;nop;nop;//delay_ms(200);clk=1;//delay_ms(200);nop;}}//-------读按键数据--------unsignedcharread(){stb=0;//给有效的片选信号(片选信号是低电平有效)dio=1;//这里必须置高,因为没有按键按下时,键值默认为00H,此时为了与键值有区别//unsignedchard;for(d=0;d8;d++){clk=0;if(dio==1){y7=1;}else{y7=0;}clk=1;if(d!=7){y=(y1);}}return(y);}voiddelay_ms(ucharcyc){//当将=1的时候,延时1msucharjj;for(jj=1;jj=cyc;jj++){nop;}}//------显示子程序--------voidxianshi(unsignedcharp){unsignedcharh;stb=1;clk=1;dio=1;write(0x0c);//显示模式设置,stb=1;write(0x40);//写数据到显示寄存器,采用地址自动加一stb=1;write(0xc0);//显示寄存器的00H单元开始for(h=0;h16;h++){write(p);//给显示寄存器送数据,}stb=1;write(0x92);//显示控制参数,点亮数码屏幕,亮度可以通过改变低三位调节}//-----判按键子程序-------voidpanjian(unsignedchark[4]){if((k[0]==0x02)){m=0x3f;}//当KS0与SEG29按键按下时候,数码管显示数字0if((k[0]==0x04)){m=0x06;}//当KS0与SEG30按键按下时候,数码管显示数字1if((k[0]==0x20)){m=0x5b;}//当KS1与SEG29按键按下时候,数码管显示数字2。if((k[0]==0x40)){m=0x4f;}//当KS1与SEG30按键按下时候,数码管显示数字3。if((k[1]==0x02)){m=0x66;}//当KS2与SEG29按键按下时候,数码管显示数字4。if((k[1]==0x04)){m=0x6d;}//当KS2与SEG30按键按下时候,数码管显示数字5。if((k[1]==0x20)){m=0x7d;}//当KS3与SEG29按键按下时候,数码管显示数字6。if((k[1]==0x40)){m=0x07;}//当KS3与SEG30按键按下时候,数码管显示数字7。if((k[2]==0x02)){m=0x7f;}//当KS4与SEG29按键按下时候,数码管显示数字8。if((k[2]==0x04)){m=0x6f;}//当KS4与SEG30按键按下时候,数码管显示数字9if((k[2]==0x20)){m=0xff;}//当KS5与SEG29按键按下时候,全屏显示。if((k[2]==0x40)){m=0x00;}//当KS5与SEG30按键按下时候,全灭。//return(m);}//----------主函数-----------------voidmain(){P0=0xff;P1=0xff;P2=0xff;P3=0xff;//初始化单片机I/O口m=0x00;while(1)//循环读按键{stb=1;dio=1;clk=1;write(0x0c);//模式设置stb=1;write(0x42);//送读按键命令(42H),for(e=0;e3;e++){w[e]=read();//读8位按键数据,}panjian(w);//判断按键值。xianshi(m);//根据按键值,给显示寄存器送相应的显示数据}}-----------------------------------------文件:TM系列IC的库包含信息编写:BLACK日期:09.07.2116:11-----------------------------------------IC型号:TM1721引脚分布:IC供电:PIN1----VDDPIN5----GND数据传输:PIN2----DIOPIN3----CLKPIN4----STB驱动公共端:PIN48~PIN45----COM0~COM3LCD驱动口:PIN44---SEG0PIN43---SEG1PIN42---空PIN41~PIN12---SEG2~SEG31键扫列线:PIN6~PIN11----KS0~KS5(复用)键扫行线:PIN15~PIN12---KEY0~KEY3(复用)拨码开关:PIN19~PIN16---SW0~SW3(复用)PWM输出:PIN23~PIN20---PWM0~PWM3(复用)-------------------------------------------TM1721驱动的流程-------------------------------------------step1、工作模式设置(放置在程序的初始化程序中,设定完成后程序中不可更改)step2、显示1)显示模式指令(固定地址or地址自动加一)2)case1:固定地址模式执行固定地址模式显示函数写入显示地址写入显示数据写入显示地址写入显示数据…………3)case2:地址自动加一显示模式执行地址自动加一模式显示函数写入要显示字符串的起始地址写入显示数据step3、打开显示控制命令step4、PWM输出控制1)输出模式指令(固定地址or地址自动加一)2)case1:固定地址模式执行固定地址模式显示函数写入显示地址写入显示数据写入显示地址写入显示数据…………3)case2:地址自动加一显示模式执行地址自动加一模式显示函数写入要显示字符串的起始地址step5、读取按键1)送入读取按键指令2)一个时钟周期为一个段检测数据端口的值,送入单片机存储器3)判断键值,送入传递变量step6、结束一个周期-------------------------------------------驱动包含函数:-------------------------------------------/******************************************函数:写一字节函数参数:dat---写入的一字节数据返回值:无******************************************/voidTM1721_Write_Byte(unsignedchardat){unsignedchari;TM1721_Delay_ms(2);//用于片选信号的延时TM1721_STB=0;//有效的片选信号for(i=0;i8;i++){TM1721_CLK=0;TM1721_DIO=dat&0x01;TM1721_CLK=1;//时钟上升沿,送入一位数据dat=1;}TM1721_Delay_ms(2);//用于片选信号的延时}/********************************************函数:地址自动加一显示函数参数:addr---显示字符串的起始地址*dat---显示数据的数组指针count---需要显示的数据的个数返回值:无********************************************/voidTM1721_Write_String(unsignedcharaddr,unsignedchar*dat,unsignedcharcount){unsignedchari;TM1721_Write_Byte(DISP_WRITE);TM1721_STB=1;TM1721_Write_Byte(0xc0+addr);//显示寄存器的00H单元开始for(i=0;icount;i++){TM1721_Write_Byte(*dat);//给显示寄存器送数据,dat++;}TM1721_STB=1;}/*******************************************函数:PWM输出控制函数参数:addr---选择哪一路PWM输出:0、1、2、3dat---输出的PWM的数据返回值:无*******************************************/voidTM1721_Write_PWM(unsignedcharaddr,unsignedchardat){TM1721_STB=1;TM1721_Write_Byte(PWM_WRITE);//PWM设定、采用固定地址TM1721_STB=1;TM1721_Write_Byte(0xc0+addr);//PWM控制地址设定TM1721_Write_Byte(dat);TM1721_STB=1;}/*******************************************函数:按键扫描位读取函数参数:无返回值:read_var返回值类型:unsignedchar*******************************************/unsignedcharTM1721_Read_Key(void){unsignedchari,read_bit,read_var;TM1721_Delay_ms(2);//用于片选信号的延时TM1721_STB=0;TM1721_DIO=1;//初始化数据端口for(i=0;i8;i++){TM1721_CLK=0;if(TM1721_DIO==1)read_bit=1;elseread_bit=0;TM1721_CLK=1;//上升沿read_var=read_var|(read_biti);}return(read_var);//传递返回值}/******************************************函数:按键键值的判断函数参数:无返回值:无*******************************************/voidTM1721_Key_Scan(void){unsignedcharKEY_VAR[3];//存放按键键值数组,最多存放3字节的数据,键值缓冲区unsignedchari;TM1721_STB=1;TM1721_Write_Byte(KEY_READ);//读按键指令、地址自动加一TM1721_Delay_ms(2);//延时for(i=0;i3;i++)
本文标题:深圳天微1721驱动
链接地址:https://www.777doc.com/doc-4534142 .html