tm1721

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

/******************************************************************************版权信息:深圳天微电子有限公司*文件名:TM1721-V1.0*当前版本:V1.0*MCU型号:STC12C5608AD*开发环境:KeiluVision4*晶震频率:11.0592MHZ*完成日期:2013-08-20*程序功能:1.LCD驱动:10位段式LCD显示0~9。2.按键功能:包含按键读程序驱动函数,按下KS0、KS1与KEY0按键时LCD第1位显示1或2。3.PWM功能:上电后PWM0PWM2亮,PWM1PWM3灭,具体LED接法请参考规格书。4.SW功能:SW0、SW1、SW2、SW3分别置高后LCD第1位显示3,4,5、6。*免责声明:1.此程序为TM1721驱动LCD演示程序,仅作参考之用。2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任。********************************************************************************/#includereg52.h//MCU头文件#includeintrins.h//包含nop指令头文件#defineucharunsignedchar//数据类型宏定义#defineuintunsignedint//数据类型宏定义#definenop_nop_();_nop_();_nop_();//宏定义/********************定义控制端口**********************/sbitDIO=P1^0;sbitCLK=P1^1;sbitSTB=P1^2;/********************定义数据*************************/ucharcodeTab0[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//清屏ucharcodeSmg[16]={0xeb,0x60,0xc7,0xE5,0x6C,0xAD,0xaf,0xE0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e};//0~F字型码ucharcodeLED[4]={0x00,0x3f,0x00,0x3f};//PWM背光调用ucharKEY[3]={0};//为存储按键值定义的数组/***************延时函数nms**************/voiddelay_nms(unsignedintn){uinti;while(n--)for(i=0;i550;i++);}/***************发送8bit数据,从低位开始**************/voidwrite_8bit(uchardat){uchari;for(i=0;i8;i++)//先写低位{CLK=0;if(dat&0x01)DIO=1;elseDIO=0;nop;CLK=1;dat=1;}CLK=0;DIO=0;}/******************发送控制命令***********************/voidwrite_command(ucharCmd){STB=1;nop;STB=0;write_8bit(Cmd);}/****************显示函数,LCD显示*****************/voiddisp(uchar*p,ucharCnt){uchari;write_command(0x3F);//工作模式设置:开启SEG、KEY、PWM、SWwrite_command(0x40);//数据设置:写数据到显示寄存器,采用地址自动加一write_command(0xc0);//地址设定:从显示寄存器的00H单元开始for(i=0;iCnt;i++){write_8bit(*p);p++;}write_command(0x97);//显示控制设置:显示开,1/3偏压,LCD电压通过改变低三位调节STB=1;}/************显示函数,显示按键、SW值在LCD第1位************/voiddisp1(uchartemp)//第1位显示按键值、SW值{disp(Tab0,10);//清屏write_command(0x3F);//工作模式设置:开启SEG、KEY、PWM、SWwrite_command(0x44);//数据设置:写数据到显示寄存器,采用固定地址write_command(0xc0);//地址设定:显示寄存器的00H单元开始write_8bit(Smg[temp]);write_command(0x97);//显示控制设置:显示开,1/3偏压,LCD电压通过改变低三位调节STB=1;}/****************读取按键值并存储*******************/voidread_key()//读取3字节按键值并存入数组KEY[],从低字节、低位开始{unsignedchari,j;write_command(0x42);//发送读按键命令DIO=1;//释放DIO数据总线for(j=0;j3;j++){for(i=0;i8;i++){CLK=0;KEY[j]=KEY[j]1;//从低位先读CLK=1;if(DIO)KEY[j]=KEY[j]|0x80;nop;nop;}nop;}CLK=0;DIO=0;STB=1;}/*****************按键处理函数*********************/voidkey_process()//按键处理函数{read_key();if(KEY[0]!=0x00){if((KEY[0]==0x01)){disp1(1);}//KS0与KEY0按键按下,LCD显示1if((KEY[0]==0x10)){disp1(2);}//KS1与KEY0按键按下,LCD显示2}}/*****************PWM背光控制函数*********************/voidPWM(unsignedchar*p){uchari;write_command(0x41);//写PWM,地址自加一write_command(0xc0);//设置显示地址,从00H开始for(i=0;i4;i++){write_8bit(*p);p++;}write_command(0x97);//显示控制设置:显示开,1/3偏压,LCD电压通过改变低三位调节STB=1;}/****************读取SW值*******************/unsignedcharread_sw()//读取1字节SW值,从低位开始{uchari,Sw;write_command(0x43);//发送读SW命令DIO=1;//释放DIO数据总线for(i=0;i8;i++){CLK=0;Sw=Sw1;nop;nop;nop;nop;CLK=1;if(DIO==1)Sw=Sw|0x80;nop;nop;}CLK=0;DIO=0;STB=1;returnSw;}/*****************SW处理函数*****************/voidsw_process(){uchartemp;temp=read_sw();switch(temp){case0x01:disp1(3);break;//LCD显示3case0x02:disp1(4);break;//LCD显示4case0x04:disp1(5);break;//LCD显示5case0x08:disp1(6);break;//LCD显示6case0x03:disp1(7);break;//LCD显示7default:break;}}voidmain(){disp(Tab0,16);//清显存disp(Smg,10);//上电后10位段式LCD显示0~9PWM(LED);//PWM0PWM2亮,PWM1PWM3灭while(1){key_process();//按键处理,显示1、2sw_process();//SW处理,显示3、4、5、6、7delay_nms(100);}}

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功