TLC2543是德州仪器公司生产的12位开关电容型逐次逼近模数转换器
TLC2543的中文资料下载:http://www.51hei.com/chip/4009.html
51单片机驱动程序如下:
- #include"TLC2543.h"
- void delay0(uint i)
- {
- while(i--);
- }
- uint Read_AD_Data(uchar cmd) //tlc2543 AD转换 ,cmd为命令指令(高四位选通11路通道,D3D2选择一次需要时钟数,D1低电平为高位优先,D0低电平为无极性输出)
- {
- uchar i;
- uint dat=0;
- clk=0;
- cs=0;
- for(i=0;i++;i<12)
- {
-
- if(sdo) dat|=0x01; //dat存放输出码,高位开始
- sdi=(bit)(cmd&0x80); //从高位开始一个时钟输入一位命令
- clk=1; //创建时钟下降沿
- clk=0;
- cmd<<=1;
- dat<<=1;
- }
- cs=1;
- delay0(300);
- cs=0;
- for(i=0;i<12;i++)
- {
-
- if(sdo) dat|=0x01;
- sdi=(bit)(cmd&0x80);
- clk=1;
- clk=0;
- cmd<<=1;
- dat<<=1;
- }
- cs=1;
- dat>>=1;
- return dat;
- }
复制代码 lcd1602显示液晶屏显示驱动:
- #include"lcd.h"
- uchar code tab[]=" 2017-5-7 SUN"; //存放在程序存储区(如flash)中的,只有在烧写程序时,才能改变tab中的各元素的值
- uchar code tab1[]=" 23-59-55";
- void LcdDelay(uint c)
- {
- uchar i;
- while(c--)
- {
- for(i=0;i++;i<110);
- }
- }
- void LcdWriteCom(uchar com)
- {
- e=0;
- rs=0;
- rw=0;
- PS=com;
- LcdDelay(5);
- e=1;
- LcdDelay(5);
- e=0;
- }
- void LcdWriteData(uchar date)
- {
- e=0;
- rs=1;
- rw=0;
- PS=date;
- LcdDelay(5);
- e=1;
- LcdDelay(5);
- e=0;
- }
- void LcdInit()
- {
- uchar num;
- LcdWriteCom(0x38); //4位总线双行显示低5*7点阵字符,指令6:00111000(001+DL+N+F+**)DL:高4位总线,低8位;N:高双行显示,低单行;F:低5*7点阵字符,高5*10
- LcdWriteCom(0x0c); //整体显示开、光标关、光标不闪烁,指令4:0000+1DCB显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
- LcdWriteCom(0x06); //光标右移、屏幕上所有文字不左移或者右移,指令3:00000+1+I/D+B光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
- LcdWriteCom(0x01); //指令1:清显示
- LcdWriteCom(0x80); //指令8:DDRAM地址设置1+00000000(数据存储地址)
- for(num=0;num<13;num++)
- {
- LcdWriteData(tab[num]); //显示数据tab:年月日
- LcdDelay(5);
- }
- LcdWriteCom(0x80+0x40); //1+1000000液晶屏的数据指针移到第二行第一个字处
- for(num=0;num<10;num++)
- {
- LcdWriteData(tab1[num]); //显示tab1:23:59:55
- LcdDelay(5);
- }
- TMOD=TMOD|0x01;//定时器0 每50000*1us=0.05s溢出一次
- TH0=0x3c;
- TL0=0xb0;
- EA=1; //开总中断
- ET0=1; //开定时器0中断
- TR0=1; //开定时器
- }
- void LcdWriteSg(uchar d,uchar add,uchar date)//分离时间的个位十位
- { uchar shi,ge;
- shi=date/10; //十位
- ge=date%10; //个位
- LcdWriteCom(d+add); //在第二行显示add
- LcdWriteData(0x30+shi); //写入数据(数字偏移位0x30+shi)
- LcdWriteData(0x30+ge);
- }
- void LcdWriteSg1(uchar d,uchar add,uchar date)//分离时间的个位十位
- { uchar shi,ge;
- shi=date/10; //十位
- ge=date%10; //个位
- LcdWriteCom(d+add);
- LcdWriteData(0x30+shi); //写入数据(数字偏移位0x30+shi)
- LcdWriteCom(d+add+2);
- LcdWriteData(0x30+ge);
- }
复制代码
仿真和完整源码下载地址:http://www.51hei.com/bbs/dpj-91718-1.html
|