单片机C语言应用100例
单片机C语言应用100例,单片机,语言,应用,利用,运用
/实例86:将按键次数写入AT24C02,再读出并用1602LCD显示#include /包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件sbit RS=P20; /寄存器选择位,将RS位定义为P2.0引脚sbit RW=P21; /读写选择位,将RW位定义为P2.1引脚sbit E=P22; /使能信号位,将E位定义为P2.2引脚sbit BF=P07; /忙碌标志位,将BF位定义为P0.7引脚sbit S=P14; /将S位定义为P1.4引脚#define OP_READ 0xa1 / 器件地址以及读取操作,0xa1即为1010 0001B#define OP_WRITE 0xa0 / 器件地址以及写入操作,0xa1即为1010 0000Bsbit SDA=P34; /将串行数据总线SDA位定义在为P3.4引脚sbit SCL=P33; /将串行时钟总线SDA位定义在为P3.3引脚unsigned char code digit =“0123456789“; /定义字符数组显示数字/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms()unsigned char i,j;for(i=0;i10;i+)for(j=0;j33;j+); /*函数功能:延时若干毫秒入口参数:n*/void delaynms(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();/*以下是对液晶模块的操作程序*/*函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*/unsigned char BusyTest(void)bit result;RS=0; /根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1; /E=1,才允许读写_nop_(); /空操作_nop_();_nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间result=BF; /将忙碌标志电平赋给resultE=0; /将E恢复低电平return result;/*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*/void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就 RS=0; /根据规定,RS R/W 时为低电平时,可以写入指令RW=0; E=0; /E置低电平(根据 8-6,写指令时,E为高 ,/ 就是 E 0 1 , 以应 置“0“_nop_();_nop_(); /空操作 个机器周期,给硬件反应时间P0=dictate; /将数据 入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间E=1; /E置高电平_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间E=0; / E 高电平 低电平时,液晶模块 行 令/*函数功能:指定字符显示的实 地址入口参数:x*/void WriteAddress(unsigned char x)WriteInstruction(x|0x80); /显示位置的 定 规定为“80H+地址 x“/*函数功能:将数据(字符的标 ASCII )写入液晶模块入口参数:y(为字符 )*/void WriteData(unsigned char y)while(BusyTest()=1); RS=1; /RS为高电平,RW为低电平时,可以写入数据RW=0;E=0; /E置低电平(根据 8-6,写指令时,E为高 ,/ 就是 E 0 1 , 以应 置“0“P0=y; /将数据 入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间E=1; /E置高电平_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间E=0; / E 高电平 低电平时,液晶模块 行 令/*函数功能:对LCD的显示模式行 设置*/void LcdInitiate(void)delaynms(15); /延时15ms,次写指令时应给LCDcurrency1的反应时间WriteInstruction(0x38); /显示模式设置:162显示,57“,8位数据口delaynms(5); /延时5ms,给硬件“反应时间WriteInstruction(0x38);delaynms(5);WriteInstruction(0x38); /fifl 次, 功delaynms(5);WriteInstruction(0x0c); /显示模式设置:显示 ,标,标不 delaynms(5);WriteInstruction(0x06); /显示模式设置:标,字符不delaynms(5);WriteInstruction(0x01); /”指令,将以的显示 delaynms(5);/*函数功能:显示时 */void Display(unsigned char x)unsigned char i,j;i=x/10; /取 ,位数字j=x%10; /取,位数字WriteAddress(0x44); /写显示地址,将位数字显示在2行5 WriteData(digiti); /将位数字的字符 写入LCDWriteData(digitj); /将个位数字的字符 写入LCD/*以下是对AT24C02的读写操作程序*/*函数功能: 数据 */void start()/ 位SDA = 1; /SDA 为高电平1”SCL = 1; / 数据 时, SCL为高电平1”_nop_(); / 个机器周期_nop_(); / 个机器周期SDA = 0; /SDA的下认为是 信号_nop_(); / 个机器周期_nop_(); / 个机器周期_nop_(); / 个机器周期_nop_(); / 个机器周期SCL = 0; /SCL为低电平时,SDA数据才允许 (即允许以 的数据 /*函数功能: 数据 */void stop()/ 位SDA = 0; /SDA 为低电平0”_nop_(); / 个机器周期_nop_(); / 个机器周期SCL = 1; / 数据 时, SCL为高电平1”_nop_(); / 个机器周期_nop_(); / 个机器周期_nop_(); / 个机器周期_nop_(); / 个机器周期SDA = 1; /SDA的 认为是 信号/*函数功能: AT24Cxx读取数据出口参数:x*/unsigned char ReadData()/ AT24Cxx入数据 MCUunsigned char i;unsigned char x; / 存 AT24Cxx 读出的数据for(i = 0; i 8; i+)SCL = 1; /SCL置为高电平x=1; /将x 的 位 位x|=(unsigned char)SDA; /将SDA的数据 按位或存入x SCL = 0; /在SCL的下读出数据return(x); /将读取的数据返回/*函数功能: AT24Cxx的 地址写入数据入口参数:y ( 存 写入的数据 */在 用数据写入函数 用 函数start(), 以SCL=0bit WriteCurrent(unsigned char y)unsigned char i;bit ack_bit; / 存应位for(i = 0; i 8; i+) / 入8个位SDA = (bit)(y / 按位 将高位数据 S/为 时高位在,低位在 _nop_(); / 个机器周期 SCL = 1; /在SCL的 将数据写入AT24Cxx _nop_(); / 个机器周期 _nop_(); / 个机器周期 SCL = 0; /将SCL置为低电平,以在SC 线 数据 的 个 y = 1; /将y 的 位 位SDA = 1; / 设 机 应在时钟 的高电平期间(SCL=1) SDA线,/以 SDA线 设 (AT24Cxx) _nop_(); / 个机器周期 _nop_(); / 个机器周期 SCL = 1; /根据规定,SCL应为高电平_nop_(); / 个机器周期 _nop_(); / 个机器周期 _nop_(); / 个机器周期 _nop_(); / 个机器周期 ack_bit = SDA; /设 AT24Cxx) SDA 低电平, 示 个字 /若 高电平, 示 , SCL = 0; /SCL为低电平时,SDA数据才允许 (即允许以 的数据 return ack_bit; / 返回AT24Cxx应位/*函数功能: AT24Cxx 的指定地址写入数据入口参数:add ( 存指定的地址 ;dat( 存 写入的数据 */void WriteSet(unsigned char add, unsigned char dat)/ 在指定地址addr处写入数据WriteCurrentstart(); / 数据 WriteCurrent(OP_WRITE); /选择 操作的AT24Cxx芯片,并告知 对其写入数据WriteCurrent(add); /写入指定地址WriteCurrent(dat); / 地址 面指定的地址 写入数据stop(); / 数据 delaynms(4); /1个字 的写入周期为1ms, 好延时1ms以/*函数功能: AT24Cxx 的 地址读取数据出口参数:x ( 存读出的数据 */unsigned char ReadCurrent()unsigned char x;start(); / 数据 WriteCurrent(OP_READ); /选择 操作的AT24Cxx芯片,并告知 读其数据x=ReadData(); /将读取的数据存入xstop(); / 数据 return x; /返回读取的数据/*函数功能: AT24Cxx 的指定地址读取数据入口参数:set_add出口参数:x */unsigned char ReadSet(unsigned char set_add)/ 在指定地址读取start(); / 数据 WriteCurrent(OP_WRITE); /选择 操作的AT24Cxx芯片,并告知 对其写入数据WriteCurrent(set_add); /写入指定地址return(ReadCurrent(); / 指定地址读出数据并返回/*函数功能:函数*/void main(void)unsigned char sum; / 存计数值unsigned char x; / 存 AT24C02读出的值LcdInitiate(); / 用LCD 函数 sum=0; /将计数值 为0while(1) /限 if(S=0) /如果该键按下delaynms(80); /软件消抖,延时80msif(S=0) / 实该键按下sum+; /计件值加1if(sum=99) /如果计满99sum=0; /0, 计数WriteSet(0x01,sum); /将计件值写入AT24C02 的指定地址“0x01“x=ReadSet(0x01); / AT24C02 读出计件值Display(x); /将计件值用1602LCD显示
收藏
编号:520475
类型:共享资源
大小:99.15KB
格式:RAR
上传时间:2019-03-08
10
积分
- 关 键 词:
-
单片机
语言
应用
利用
运用
- 资源描述:
-
单片机C语言应用100例,单片机,语言,应用,利用,运用
展开阅读全文
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。