历史上的今天
返回首页

历史上的今天

今天是:2024年11月08日(星期五)

正在发生

2019年11月08日 | TTP229触摸模块的51单片机驱动程序

2019-11-08 来源:51hei

网购了一块TTP229的触摸模块。模块中实际使用的是8229BSF集成块。本人用STC89C52搭建了测试电路。用12864液晶显示。
显示01-16,表示16个按钮的对应值。

制作出来的实物图如下:
TTP229.jpg?imageView2/2/w/550TTP229_1.jpg?imageView2/2/w/550

单片机源程序如下:

/*********************************************************************************

* 【作    者】: 

* 【版    本】: 

* 【函数功能】: 利用单线制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;

推荐阅读

史海拾趣

Blue Creation公司的发展小趣事

随着国内市场的饱和,Blue Creation公司决定将目光投向海外市场。公司制定了一系列国际化战略,包括设立海外研发中心、拓展销售渠道、加强品牌推广等。经过几年的努力,Blue Creation的产品逐渐打入国际市场,赢得了众多海外客户的认可。同时,公司也积极吸收国际先进技术和管理经验,不断提升自身的竞争力。

东晶(ECEC)公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,东晶电子开始将目光投向国际市场。公司积极参与国际展会,与全球知名电子企业建立合作关系,产品出口到欧洲、北美、东南亚等多个国家和地区。同时,东晶电子还与国际知名厂商进行技术交流和合作研发,不断提升自身技术水平,以适应全球市场的竞争需求。

南京中科微公司的发展小趣事

南京中科微电子有限公司(CSM)的创立源于一群海归科学家和工程师的激情与梦想。他们曾在国外知名半导体公司如Marvell、ADI、Linear Tech等积累了丰富的研发经验,并在国家重点研究院所中从事前沿研究。这群人深感国内在射频/模拟关键芯片领域的落后,于是决定回国创立CSM,旨在打破国外技术垄断,实现自主创新和产业化。

Aborn Electronics Inc公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,Aborn Electronics开始积极寻求市场拓展。公司先后在国内外多个地区设立了销售网点和分支机构,并通过参加各类行业展会和论坛,加强与其他企业的交流与合作。同时,Aborn Electronics注重品牌建设,通过提升产品质量和服务水平,逐渐树立起了良好的企业形象和口碑。

Diodes公司的发展小趣事

在半导体行业中,产品质量是企业生存和发展的基石。Diodes公司深知这一点,始终将产品质量放在首位。公司建立了完善的质量管理体系,从原材料采购、生产制造到产品检验,每一个环节都严格把控。同时,Diodes还不断引进先进的生产技术和设备,提高生产效率和产品品质。这些努力使得Diodes的产品在市场上赢得了良好的口碑,赢得了众多客户的信赖。

ASPEED Technology公司的发展小趣事

ASPEED的AST2600 BMC与瑞萨电子的I3C器件相结合,为客户提供了设计便捷、带宽增强且系统成本优化的解决方案。这一合作不仅展示了ASPEED在服务器管理领域的实力,还进一步推动了DDR5解决方案对I3C标准的推广使用。通过双方的努力,共同客户在实现向全新高速总线接口飞跃发展的过程中,获得了更加信心满满的设计体验。

问答坊 | AI 解惑

运算放大器的增益误差对DAC性能的影响

假设DAC使用了一个反相运算放大器,C1=C2,A(0)=1000,若VREF=1V,问DAC在最怀情况下的最大精度? 反相放大器的环路增益=0.5×1000=500,因此增益误差为1/501=0.002。增益误差应该小于±0.5LSB,表示为: 增益误差=0.002…

查看全部问答>

驳关于STC89的一些咵噪

网上对STC的评价并不是很好,于是斗胆尝试了一把,到现在还是没有发现什么问题 我用的是89C58…

查看全部问答>

PXA300(Monahans) 能否支持1024x768分辨率?

PXA300(Monahans) 能否支持1024x768分辨率?…

查看全部问答>

求问关于WINCE 键盘锁定和解锁的问题

wince提供解锁某个键的函数API么? 解锁方面的API有么? 谢谢…

查看全部问答>

帮忙出主意,我的前途该往哪里走

  大家好,迷茫了很久,还是看不到方向,请有智慧的您帮忙吧,诚心请教   我毕业直接来到深圳,工作两年,第一年几乎虚度了,第二年用三星八位单片机汇编语言做了点简单的事(按键,led,定时器,i/o口发音,固定显示的液晶之类,硬件电路也 ...…

查看全部问答>

在CE下怎么对光驱进行操作?

如题,我想用EVC编程对光驱在CE下进行操作。…

查看全部问答>

【讨论】关于FLASH的问题

我在做写入flash的时候写入的是113个字节的数据,A段的从1000开始写的!!! 我把要写入的数据建立在一个结构里了!!! 可是写完以后读的时候总是后写入的两个读出的是0;如果写入的少的话,比如我写50个字节那么 就有最后1个读出是0;我想问问 ...…

查看全部问答>

求助!!MPS430F149驱动电机时候总死机

用F149驱动继电器结合驱动380V三相电机 利用两极继电器 中间采用光耦驱动第一级继电器 第一级继电器再控制第二级380继电器 上高压电时继电器结合 电机转 然后单片机就死机 求助!!!…

查看全部问答>

看到一款平板电脑,用TI的OMP4430----居然只要¥1500元

下面是那个厂家的广告单........如果又要买平板的兄弟真的可以考虑   …

查看全部问答>

为什么我的开发板下载郭天祥的程序没用

这个开发板是去年在淘宝上买的,放那里一直没动,最近想学了,所以拿出来看看,在百度文库里有这个开发板的详细介绍,下面是地址http://wenku.baidu.com/view/0878e189680203d8ce2f249a.html单片机的型号是STC 90C516RD+郭天祥视频教程里面的程序下 ...…

查看全部问答>