历史上的今天
今天是:2024年11月08日(星期五)
2019年11月08日 | TTP229触摸模块的51单片机驱动程序
2019-11-08 来源:51hei
网购了一块TTP229的触摸模块。模块中实际使用的是8229BSF集成块。本人用STC89C52搭建了测试电路。用12864液晶显示。
显示01-16,表示16个按钮的对应值。
制作出来的实物图如下:

单片机源程序如下:
/*********************************************************************************
* 【作 者】:
* 【版 本】:
* 【函数功能】: 利用单线制DS18B20温度传感器, 并在液晶12864上显示
* 【使用说明】: 触摸板P1的第一和第三跳线短接
**********************************************************************************/
#include #include #include #include #include #define uchar unsigned char #define uint unsigned int // 液晶现实属区区 uchar code pic1[]; uchar code pic2[]; uchar code pic3[]; /* 液晶控制接口 -----------------------------------------------*/ sbit RS = P0^7; sbit WRD = P0^6; sbit E = P0^5; sbit PSB = P0^4; sbit RES = P0^3; sbit sign = P1^0; sbit sign1 = P1^1; // TTP229接口 sbit SDA=P1^2; sbit SCL=P1^3; // 温度传感器接口 sbit DQ=P3^7; //数据传输线接单片机的相应的引脚 /* 温度测量用变量定义 -----------------------------------------------*/ unsigned char tempL=0; //设全局变量 unsigned char tempH=0; unsigned int sdate;//测量到的温度的整数部分 unsigned char xiaoshu1;//小数第一位 unsigned char xiaoshu2;//小数第二位 unsigned char xiaoshu;//两位小数 bit fg=1; //温度正负标志 // 液晶处理函数 void TransferData(char data1,bit DI); void display(void); void display_grapic(void); void delayms(uint n); void DisplayLine(uchar line1,uchar line2); void DisplayGraphic(uchar *adder); void delay(uint m); void lcd_mesg(uchar *adder1); void delay1ms(unsigned int t); // 18B20温度传感器函数 void ReadTemperature(void); void Init_DS18B20(void); unsigned char ReadOneChar(); void WriteOneChar(unsigned char dat); void Delay10us(unsigned int t); void Initial_com(void); // 扫描TTP229电容触摸键盘模块 unsigned int TTP229B(void); /******************************************************************** * 名称 : Convert(uchar In_Dat) * 功能 : 因为电路设计时,P2.0--P2.7接法刚好了资料中的相反,所以设计该函数。 * 输入 : 1602资料上的值 * 输出 : 送到1602的值 ***********************************************************************/ unsigned char Convert(uchar In_Dat) { uchar i, Out_Dat; for(i=0; i<8; i++){ Out_Dat= In_Dat; } return Out_Dat; } void initinal(void) { //LCD字库初始化程序 delay(40); //大于40MS的延时程序 PSB=1; //设置为8BIT并口工作模式 delay(1); //延时 RES=0; //复位 delay(1); //延时 RES=1; //复位置高 delay(10); TransferData(0x30,0); //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF delay(100); //大于100uS的延时程序 TransferData(0x30,0); //Function Set delay(37); ////大于37uS的延时程序 TransferData(0x08,0); //Display on Control delay(100); //大于100uS的延时程序 TransferData(0x10,0); //Cursor Display Control光标设置 delay(100); //大于100uS的延时程序 TransferData(0x0C,0); //Display Control,D=1,显示开 delay(100); //大于100uS的延时程序 TransferData(0x01,0); //Display Clear delay(10); //大于10mS的延时程序 TransferData(0x06,0); //Enry Mode Set,光标从右向左加1位移动 delay(100); //大于100uS的延时程序 } /******************************************************************** * 名称 : initina2() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void initina2(void) //LCD显示图片(扩展)初始化程序 { delay(40); //大于40MS的延时程序 PSB=1; //设置为8BIT并口工作模式 delay(1); //延时 RES=0; //复位 delay(1); //延时 RES=1; //复位置高 delay(10); TransferData(0x36,0); //Extended Function Set RE=1: extended instruction delay(100); //大于100uS的延时程序 TransferData(0x36,0); //Extended Function Set:RE=1: extended instruction set delay(37); ////大于37uS的延时程序 TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1) delay(100); //大于100uS的延时程序 TransferData(0x01,0); //CLEAR SCREEN delay(100); //大于100uS的延时程序 } /******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main(void) { uchar init18B20[]={ "温度传感器18B20 " "初始化中...... " " " " " }; uchar curtemp[]={ "当前温度: " " " " " " " }; uchar IC_DAT2[]={ "白日依山尽, " //0x80 "欲穷千里目, " //0x90 "黄河入海流。 " //0x88 "更上一层楼。 " //0x98 }; unsigned int key=0; // 初始化串口 Initial_com(); initinal(); //调用LCD字库初始化程序 delay(100); //大于100uS的延时程序 lcd_mesg(IC_DAT2); //显示中文汉字2 delayms(80); sign = 0; // 显示温度传感器18B20初始化中 initinal(); //调用LCD字库初始化程序 delay(100); //大于100uS的延时程序 lcd_mesg(init18B20); //显示中文汉字1 delay(240); delay(240); Init_DS18B20(); //初始化 sign = 1; delayms(80); SDA=1; SCL=1; while(1) { sign1 = 0; // 初始化温度传感器并取得当前温度 ReadTemperature(); sign1=1; SBUF=sdate; delayms(20); SBUF=xiaoshu; // 转换温度数据为字符串 // 整数部分 curtemp[10]=48+sdate/10; curtemp[11]=48+sdate%10;
史海拾趣
|
假设DAC使用了一个反相运算放大器,C1=C2,A(0)=1000,若VREF=1V,问DAC在最怀情况下的最大精度? 反相放大器的环路增益=0.5×1000=500,因此增益误差为1/501=0.002。增益误差应该小于±0.5LSB,表示为: 增益误差=0.002… 查看全部问答> |
|
大家好,迷茫了很久,还是看不到方向,请有智慧的您帮忙吧,诚心请教 我毕业直接来到深圳,工作两年,第一年几乎虚度了,第二年用三星八位单片机汇编语言做了点简单的事(按键,led,定时器,i/o口发音,固定显示的液晶之类,硬件电路也 ...… 查看全部问答> |
|
我在做写入flash的时候写入的是113个字节的数据,A段的从1000开始写的!!! 我把要写入的数据建立在一个结构里了!!! 可是写完以后读的时候总是后写入的两个读出的是0;如果写入的少的话,比如我写50个字节那么 就有最后1个读出是0;我想问问 ...… 查看全部问答> |
|
用F149驱动继电器结合驱动380V三相电机 利用两极继电器 中间采用光耦驱动第一级继电器 第一级继电器再控制第二级380继电器 上高压电时继电器结合 电机转 然后单片机就死机 求助!!!… 查看全部问答> |
|
这个开发板是去年在淘宝上买的,放那里一直没动,最近想学了,所以拿出来看看,在百度文库里有这个开发板的详细介绍,下面是地址http://wenku.baidu.com/view/0878e189680203d8ce2f249a.html单片机的型号是STC 90C516RD+郭天祥视频教程里面的程序下 ...… 查看全部问答> |




