已阅读5页,还剩246页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九单片机开发网 100 例程序设计范例汇总例程序设计范例汇总 第一章第一章 4 实例 1 使用累加器进行简单加法运算 4 实例 2 使用 B 寄存器进行简单乘法运算 4 实例 3 通过设置 RS1 RS0 选择工作寄存器区 1 4 实例 4 使用数据指针 DPTR 访问外部数据数据存储器 4 实例 5 使用程序计数器 PC 查表 4 实例 6 IF语句实例 4 实例 7 SWITCH CASE语句实例 4 实例 8 FOR语句实例 4 实例 9 WHILE语句实例 5 实例 10 DO WHILE语句实例 5 实例 11 语句形式调用实例 5 实例 12 表达式形式调用实例 5 实例 13 以函数的参数形式调用实例 5 实例 14 函数的声明实例 5 实例 15 函数递归调用的简单实例 5 实例 16 数组的实例 6 实例 17 指针的实例 6 实例 18 数组与指针实例 6 实例 19 P1 口控制直流电动机实例 6 第二章第二章 8 实例 20 用 74LS165 实现串口扩展并行输入口 8 实例 21 用 74LS164 实现串口扩展并行输出口 10 实例 22 P0 I O 扩展并行输入口 12 实例 23 P0 I O 扩展并行输出口 12 实例 24 用 8243 扩展 I O 端口 12 实例 25 用 8255A 扩展 I O 口 14 实例 26 用 8155 扩展 I O 口 19 第三章第三章 26 实例 29 与 AT24 系列 EEPROM 接口及驱动程序 26 实例 30 EEPROM X5045 接口及驱动程序 30 实例 31 与铁电存储器接口及驱动程序 33 实例 32 与双口 RAM 存储器接口及应用实例 35 实例 33 与 NANDFLASH K9F5608 接口及驱动程序 35 第四章第四章 43 实例 34 独立键盘控制 43 实例 35 矩阵式键盘控制 44 实例 36 改进型 I O 端口键盘 46 实例 37 PS 2 键盘的控制 49 第九单片机开发网 实例 38 LED 显示 53 实例 39 段数码管 HD7929 显示实例 54 实例 40 16 2 字符型液晶显示实例 55 实例 41 点阵型液晶显示实例 61 实例 42 LCD 显示图片实例 63 第五章第五章 70 实例 43 简易电子琴的设计 70 实例 44 基于 MCS 51 单片机的四路抢答器 71 实例 45 电子调光灯的制作 76 实例 46 数码管时钟的制作 81 实例 47 LCD 时钟的制作 96 实例 48 数字化语音存储与回放 103 实例 49 电子标签设计 112 第六章第六章 120 实例 50 指纹识别模块 121 实例 51 数字温度传感器 121 第七章第七章 124 实例 53 超声波测距 124 实例 54 数字气压计 125 实例 55 基于单片机的电压表设计 132 实例 56 基于单片机的称重显示仪表设计 133 实例 57 基于单片机的车轮测速系统 136 第八章第八章 138 实例 58 电源切换控制 138 实例 59 步进电机控制 140 实例 60 单片机控制自动门系统 141 实例 61 控制微型打印机 144 实例 62 单片机控制的 EPSON 微型打印头 144 实例 63 简易智能电动车 145 实例 64 洗衣机控制器 149 第九章第九章 152 实例 65 串行 A D 转换 152 实例 66 并行 A D 转换 153 实例 67 模拟比较器实现 A D 转换 154 实例 68 串行 D A 转换 155 实例 69 并行电压型 D A 转换 156 实例 70 并行电流型 D A 转换 156 实例 71 2 I C接口的 A D 转换 157 实例 72 2 I C接口的 D A 转换 161 第九单片机开发网 第十章第十章 164 实例 73 单片机间双机通信 164 实例 74 单片机间多机通信方法之一 166 实例 75 单片机间多机通信方法之二 171 实例 76 PC 与单片机通信 176 实例 77 红外通信接口 178 第十一章第十一章 180 实例 79 单片机实现 PWM 信号输出 180 实例 80 实现基于单片机的低频信号发生器 182 实例 81 软件滤波方法 183 实例 82 FSK 信号解码接收 186 实例 83 单片机浮点数运算实现 187 实例 84 神经网络在单片机中的实现 192 实例 85 信号数据的 FFT 变换 194 第十二章第十二章 198 实例 86 2 I C总线接口的软件实现 198 实例 87 SPI 总线接口的软件实现 200 实例 88 1 WIRE 总线接口的软件实现 205 实例 89 单片机外挂 CAN 总线接口 207 实例 90 单片机外挂 USB 总线接口 210 实例 91 单片机实现以太网接口 214 实例 92 单片机控制 GPRS 传输 221 实例 93 单片机实现 TCP IP 协议 223 第十三章第十三章 229 实例 94 读写 U 盘 229 实例 95 非接触 IC 卡读写 234 实例 96 SD 卡读写 238 实例 97 高精度实时时钟芯片的应用 242 第十四章第十四章 247 实例 98 智能手机充电器设计 247 实例 99 单片机控制门禁系统 248 第九单片机开发网 第一章第一章 实例 1 使用累加器进行简单加法运算 MOVA 02H A 2 ADD A 06H A A 06H 实例 2 使用 B 寄存器进行简单乘法运算 MOVA 02H A 2 MOVB 06H B 6 MUL AB BA A B 6 2 实例 3 通过设置 RS1 RS0 选择工作寄存器区 1 CLR PSW 4 PSW 4 0 SETBPSW 5 PSW 5 1 实例 4 使用数据指针 DPTR 访问外部数据数据存储器 MOV DPTR data16 DPTR data16 MOVXA DPTR A DPTR MOVX DPTR A DPTR A 实例 5 使用程序计数器 PC 查表 MOV data data MOVCA A DPTR PC PC 1 A A PC 实例 6 if 语句实例 void main int a b c min printf n please input three number scanf d d d if a b else if b a else if c aa printf d a 实例 9 while 语句实例 void main int i 0 while i 10 i 实例 10 do while 语句实例 void main int i 0 do i while i 10 实例 11 语句形式调用实例 void main int i 0 while i 10 i Sum 函数调用 实例 12 表达式形式调用实例 void main int a b i 0 while i 10 i i 4 Sum a b 函数调用 实例 13 以函数的参数形式调用实例 void main int a b c i 0 while i 10 i i max c Sum a b 函数调用 实例 14 函数的声明实例 void main int max int x int y 函数的声明 int a b c i 0 while i 10 i i max c Sum a b 函数调用 实例 15 函数递归调用的简单实例 void fun int a 1 result i for i 0 i 10 i a I result fun 函数调用 第九单片机开发网 return result 实例 16 数组的实例 void main char num 3 3 定义多维数组 int i 0 j 0 for i 3 i for j 3 j printf c num i j printf n 实例 17 指针的实例 void main int a 3 p p 将变量 a 的地址赋值给指针变量 p printf d d a p 输出二者的数值进行对比 实例 18 数组与指针实例 void main int i 3 num 3 1 2 3 p p num 将数组 num 的地址赋值给指针变量 p result max p 3 函数调用 计算数组的最大值 实例 19 P1 口控制直流电动机实例 sfr p1 0 x90 sbit p10 p1 0 sbit p11 p1 1 void main int i m int j 100 int k 20 正快转 for i 0 i 100 i P10 1 for j 0 j 50 j m 0 P10 0 第九单片机开发网 for j 0 j 10 j m 0 正慢转 for i 0 i 100 i P10 1 for j 0 j 10 j m 0 p10 0 for j 0 j 50 j m 0 负快转 for i 0 i 100 i p11 1 for j 0 j 50 j m 0 p11 0 for j 0 j 10 j m 0 负慢转 for i 0 i 100 i p11 1 for j 0 j 10 j m 0 p11 0 for j 0 j 50 j 第九单片机开发网 m 0 第二章第二章 实例 20 用 74LS165 实现串口扩展并行输入口 1 函数声明管脚定义 库函数声明 管脚定义 include sbit LOAD P1 7 用 P1 7 控制 SH 管脚 2 串口初始化函数 UART init 函数名称 UART init 功能说明 串口初始化 设定串口工作在方式 0 void UART init void SCON 0 x10 设串行口方式 0 允许接收 启动接收过程 ES 0 禁止串口中断 3 数据接收函数 PA 函数名称 PA 输入参数 无 输出参数 返回由并口输入的数据 功能说明 接收八位串行数据 unsigned char PA void unsigned char PA data LOAD 0 当 P1 7 输出低电平 74LS165 将并行数据装入寄存器 当中 LOAD 1 当 P1 7 输出高电平 74LS165 在时钟信号下进行移位 UART init 74LS165 工作在时钟控制下的串行移位状态 while RI 0 循环等待 RI 0 PA data SBUF 第九单片机开发网 return PA data 返回并行输入的数据 1 函数声明管脚定义 库函数声明 管脚定义 include sbit a7 ACC 7 sbit simuseri CLK P1 6 用 P1 6 模拟串口时钟 sbit simuseri DATA P1 5 用 P1 5 模拟串口数据 sbit drive74165 LD P1 7 用 P1 7 控制 SH 管脚 2 数据输入函数 in simuseri 函数名称 in simuseri 输入参数 无 输出参数 data buf 功能说明 8 位同位移位寄存器 将 simuseri DATA 串行输入的数据按从低位到 高位 保存到 data buf unsigned char in simuseri void unsigned char i unsigned char data buf i 8 do ACC ACC 1 for simuseri CLK 0 a7 simuseri DATA for simuseri CLK 1 while i 0 simuseri CLK 0 data buf ACC return data buf 3 数据输出函数 PAs 函数名称 PAs 输入参数 无 输出参数 PAs buf 返回并行输入 74LS165 的数据 第九单片机开发网 功能说明 直接调用 即可读取并行输入 74LS165 的数据 不需要考虑 74LS165 的 工作原理 unsigned char PAs void unsigned char PAs buf drive74165 LD 0 drive74165 LD 1 PAs buf in simuseri return PAs buf 实例 21 用 74LS164 实现串口扩展并行输出口 单片机串口驱动 74LS164 的程序主要包括函数声明管脚定义部分 串口初始化函数以 及数据发送函数 1 函数声明管脚定义 库函数声明 管脚定义 include sbit CLR P1 7 用 P1 7 控制 CLR 2 串口初始化函数 UART init 函数名称 UART init 功能说明 串口初始化 设定串口工作在方式 0 void UART init void SCON 0 x00 没串行口方式 0 允许发送 启动发送过程 ES 0 禁止串口中断 3 数据发送函数 PA out 函数名称 PA out 输入参数 PA data 需要从 74LS164 并行口输出的数据 输出参数 无 功能说明 发送八位串行数据至并口 void PA out unsigned char PA data CLR 0 并口输出清零 第九单片机开发网 CLR 1 开始串行移位 UART init 74LS165 工作在时钟控制下的串行移位状态 while TI 0 循环等待 TI 0 SBUF PA data 单片机 I O 端口驱动 74LS164 主要包括函数声明管脚定义部分 数据输入函数以及数 据输出函数 1 函数声明管脚定义 库函数声明 管脚定义 include sbit simuseri CLK P1 6 用 P1 6 模拟串口时钟 sbit simuseri DATA P1 5 用 P1 5 模拟串口数据 sbit drive74164 CLR P1 7 用 P1 7 控制 CLR sbit a0 ACC 0 2 数据输入函数 out simuseri 函数名称 out simuseri 输入参数 data buf 输出参数 无 功能说明 8 位同步移位寄存器 将 data buf 的数据逐位输出到 simuseri DATA void out simuseri char data buf char i i 8 ACC data buf do simuseri CLK 0 simuseri DATA a0 simuseri CLK 1 ACC ACC 1 while i 0 simuseri CLK 0 第九单片机开发网 3 数据输出函数 PA out 函数名称 PA out 输入参数 Pseri out 需要输出的 8 位数据 输出参数 无 功能说明 将 Pseri out 中的数据送到 74165 并行口 A G 输出 void PA out char Pseri out drive74164 CLR 0 并口输出清零 drive74164 CLR 1 开始串行移位 out simuseri Pseri out 实例 22 P0 I O 扩展并行输入口 I O 口对应的地址为 1111 1110 1111 1111 B FEFFH CPU 操作指令为 define 244 addr xbyte 0XFEFF unsigned char I O DATA I O DATA 244 addr 实例 23 P0 I O 扩展并行输出口 I O 端口对应的地址为 1111 1101 1111 1111 B FDFFH CPU 操作指令为 define 273 addr xbyte 0XFDFF unsigned char I O DATA 244 addr I O DATA 实例 24 用 8243 扩展 I O 端口 include sbit ContrBit0 P1 0 sbit ContrBit1 P1 1 sbit ContrBit2 P1 2 sbit ContrBit3 P1 3 sbit PROG P1 4 sbit CS P1 5 char driver8243 char sele P char sele M char out data char in data 0 char data buf PROG 1 第九单片机开发网 置 PROG 为高电平 开始写控制字 if sele P else ContrBit0 1 if sele P else ContrBit1 1 以上两位共同指定端口地址 写端口工作模式控制字 if sele M else ContrBit2 1 if sele M else ContrBit3 1 完成写控制字 PROG 0 在 PROG 上产生下降沿 switch sele M sele M B00 为输入 不处理 等待上升沿 case 1 data buf out data break sele M B01 为输出 直接送数据 case 2 data buf out data break sele M B10 为逻辑或 直接送数据 case 3 data buf out data break sele M B11 为逻辑与 直接送数据 PROG 1 产生上升沿 if sele M return in data sele M B00 返回接收到的数据 第九单片机开发网 sele M B00 返回 0 void main void char receive data receive data driver8243 1 0 5 实例 25 用 8255A 扩展 I O 口 函数名称 rd PA 输入函数 无 输出参数 PA data PA 输入的数据 功能说明 驱动 PA 实现输入功能 读入 PA 的并行数据 unsigned char rd PA void 读 PA 1 管脚定义及函数声明 函数声明 管脚定义 include include define a8255 PA XBYTE 0 x7F7C PA 地址 define a8255 PB XBYTE 0 x7F7D PB 地址 define a8255 PC XBYTE 0 x7F7E PC 地址 define a8255 CON XBYTE 0 x7F7F 控制字地址 unsigned char bdata IO flags 用于表示 PA PB PC 的当前输入输出状态 内容不能被其他程序改写 sbit IO flagsA IO flags 0 PA 的当前输入输出状态 sbit IO flagsB IO flags 1 PB 的当前输入输出状态 sbit IO flagsC IO flags 2 PC 的当前输入输出状态 unsigned char const cfg table 8 0 x80 10000000b c out b out a out 0 x90 10010000b c out b out a in 0 x82 10000010b c out b in a out 0 x92 10010010b c out b in a in 0 x89 10001001b c in b out a out 0 x99 10011001b c in b out a in 0 x8B 10001011b c in b in a out 0 x9B 10011011b c in b in a in unsigned char rd PA void 第九单片机开发网 读 PA unsigned char rd PB void 读 PB unsigned char rd PC void 读 PC void wr PA unsigned char PA data 写 PA void wr PB unsigned char PB data 写 PB void wr PC unsigned char PC data 写 PC void set PC unsigned char PC num PC 位操作 置位 PC num 为端口号 0 7 void clr PC unsigned char PC num PC 位操作 复位 PC num 为端口号 0 7 void PABC config void 写 8255A 控制字 2 端口 A B C 读写函数 unsigned char PA data ACC IO flags 把状态标志字读到 ACC 便于进行位操作 do IO flagsA 1 置 PA 状态标志位为高 输入 IO flags ACC PABC config 调用配置子程序 完成对 8255 的设置 ACC IO flags while IO flagsA 0 判断状态标志位是否为高 控制字设置完成 PA data a8255 PA 把 PA 的数据读到 PA data return PA data 返回 PA data 函数名称 rd PB 输入函数 无 输出参数 PB data PB 输入的数据 功能说明 驱动 PB 实现输入功能 读入 PB 的并行数据 第九单片机开发网 unsigned char rd PB void 读 PB unsigned char PB data ACC IO flags 把状态标志字读到 ACC 便于进行位操作 do IO flagsB 1 置 PB 状态标志位为高 输入 IO flags ACC PABC config 调用配置子程序 完成对 8255 的设置 while IO flagsB 0 判断状态标志位是否为高 控制字设置完成 PB data a8255 PB 把 PB 的数据读到 PB data return PB data 返回 PB data 函数名称 rd PC 输入函数 无 输出参数 PC data PC 输入的数据 功能说明 驱动 PC 实现输入功能 读入 PC 的并行数据 unsigned char rd PC void 读 PC unsigned char PC data ACC IO flags 把状态标志字读到 ACC 便于进行位操作 do IO flagsC 1 置 PC 状态标志位为高 输入 IO flags ACC PABC config 调用配置子程序 完成对 8255 的设置 ACC IO flags while IO flagsC 0 判断状态标志位是否为高 第九单片机开发网 控制字设置完成 PC data a8255 PC 把 PC 的数据读到 PC data return PC data 返回 PC data 函数名称 wr PA 输入函数 PA data 送 PA 输出的数据 输出参数 无 功能说明 驱动 PA 实现输出功能 输出数据到 PA void wr PA unsigned char PA data 写 PA ACC IO flags 把状态标志字读到 ACC 便于进行位操作 IO flagsA 0 置 PA 状态标志位为低 输出 IO flags ACC 位操作完成 把 ACC 的内容写回状态标志字 PABC config 调用配置子程序 完成对 8255 的设置 ACC IO flags while IO flagsA 1 判断状态标志位是否为高 为高 设置未完成 需从新设置 a8255 PA PA data 将 PA data 的内容送到 PA 函数名称 wr PB 输入函数 PB data 送 PB 输出的数据 输出参数 无 功能说明 驱动 PB 实现输出功能 输出数据到 PA void wr PB unsigned char PB data 写 PB ACC IO flags 把状态标志字读到 ACC 便于进行位操作 IO flagsB 0 置 PB 状态标志位为低 输出 第九单片机开发网 IO flags ACC 位操作完成 把 ACC 的内容写回状态标志字 PABC config 调用配置子程序 完成对 8255 的设置 ACC IO flags while IO flagsB 1 判断状态标志位是否为高 为高 设置未完成 需从新设置 a8255 PB PB data 将 PB data 的内容送到 PB 函数名称 wr PC 输入函数 PC data 送 PC 输出的数据 输出参数 无 功能说明 驱动 PC 实现输出功能 输出数据到 PC void wr PC unsigned char PC data 写 PC ACC IO flags 把状态标志字读到 ACC 便于进行位操作 IO flagsC 0 置 PC 状态标志位为低 输出 IO flags ACC 位操作完成 把 ACC 的内容写回状态标志字 PABC config 调用配置子程序 完成对 8255 的设置 ACC IO flags while IO flagsC 1 判断状态标志位是否为高 为高 设置未完成 需从新设置 a8255 PC PC data 将 PC data 的内容送到 PC 3 端口 C 配置函数 函数名称 set PC 输入函数 PC num 范围 0 7 输出参数 无 功能说明 对 PC 进行位操作 置 PC PC num 为高 第九单片机开发网 void set PC unsigned char PC num ACC IO flags IO flagsC 0 ACC IO flags PC num PC num 1 PC num PC num 0 x01 a8255 CON PC num 函数名称 clr PC 输入函数 PC num 范围 0 7 输出参数 无 功能说明 对 PC 进行位操作 清 PC PC num 为低 void clr PC unsigned char PC num ACC IO flags IO flagsC 1 ACC IO flags PC num PC num 1 PC num PC num a8255 CON PC num 4 写控制字函数 函数名称 PABC config 功能说明 写 8255A 的控制字寄存器 void PABC config void a8255 CON cfg table IO flags 实例 26 用 8155 扩展 I O 口 1 相关函数声明及管脚定义 函数声明 管脚定义 include include define a8155 PA XBYTE 0 x7E00 控制字地址 define a8155 PB XBYTE 0 x7E01 PA 地址 define a8155 PC XBYTE 0 x7E02 PB 地址 第九单片机开发网 define a8155 CON XBYTE 0 x7E03 PC 地址 define Timer A XBYTE 0 x7E04 定时器寄存器 A define Timer B XBYTE 0 x7E05 定时器寄存器 B define mem head XBYTE 0 x7F00 存储器首地址 unsigned char bdata IO flags 用于表示 PA PB PC 的当前输入输出状态 内容不能被其他程序改写 sbit IO flagA IO flags 0 PA 的当前输入输出状态 sbit IO flagB IO flags 1 PB 的当前输入输出状态 sbit IO flagC IO flags 2 PC 的当前输入输出状态 sbit IO flagC1 IO flags 3 PC 的当前输入输出状态 sbit Int flagA state flags 4 PA 的当前输入输出状态 sbit Int flagB state flags 5 PB 的当前输入输出状态 sbit Timer flag1 state flags 6 sbit Timer flag2 state flags 7 Timer 的状态置位表示计数中 unsigned char rd mem unsigned char mem ad 读存储器 void wr mem unsigned char mem ad unsigned char mem data 写存储器 char rd PA void 读 PA char rd PB void 读 PB char rd PC void 读 PC void wr PA unsigned char PA data 写 PA void wr PB unsigned char PB data 写 PB void wr PC unsigned char PC data 写 PC void Dint PA void 关端口 A 中断 void Eint PA void 开端口 A 中断 void Dint PB void 关端口 B 中断 第九单片机开发网 void Eint PB void 开端口 B 中断 void setting PC0int void void setting PC4int void void start timer void 开始计数器计数 void stop timer void 停止计数器计数 void setting zero stop void 设定计数到零停止计数 int rd timer void 读计数值 void setting timerout mode unsigned char mode 设定输出模式 2 读写外 RAM 函数 读写外 RAM 函数对外部存储器指定单元数据进行读写 程序代码如下 函数名称 rd mem 输入函数 mem ad 范围 0 255 输出参数 mem data 存储对应数据 功能说明 读外部 RAM 输入相对地址 返回数据 unsigned char rd mem unsigned char mem ad 读存储器 unsigned char mem data unsigned int AD mem AD mem AD mem AD mem mem ad mem data XBYTE AD mem return mem data 函数名称 wr mem 输入函数 mem ad mem data 相对地址和数据 输出参数 无 功能说明 写数据到外部 RAM 把数据写到相应的地址 void wr mem unsigned char mem ad unsigned char mem data 写存储器 unsigned int AD mem AD mem AD mem AD mem mem ad XBYTE AD mem mem data 第九单片机开发网 3 端口 PA 端口 PB 以及端口 PC 的读写设置函数 端口 PA 端口 PB 以及端口 PC 的读写设置函数主要完成对 8155 端口的输入输出设置 及 数据读写 程序代码如下 函数名称 rd PA 输入函数 无 输出参数 PA data 功能说明 返回 PA 数据 char rd PA void 读 PA unsigned char PA data ACC state flags 把状态标志字读到 ACC 便于进行位操作 do IO flagA 0 置 PA 状态标志位为低 输入 state flags ACC a8155 CON state flags 重写控制字 完成对 8155 的设置 while IO flagA 1 判断状态标志位是否为高 控制字设置完成 PA data a8155 PA 把 PA 的数据读到 PA data return PA data 返回 PA data 读 PB PC 的函数 rd PB 和 rd PC 程序代码与 rd PA 类似 不再赘述 函数名称 wr PA 输入函数 PA data 输出参数 无 功能说明 把 PA data 送到 PA 输出 void wr PA unsigned char PA data 写 PA ACC state flags 把状态标志字读到 ACC 便于进行位操作 第九单片机开发网 IO flagA 1 置 PA 状态标志位为高 输出 state flags ACC 位操作完成 把 ACC 的内容写回状态标志字 a8155 CON state flags 写控制字 完成对 8155 的设置 while IO flagA 0 判断状态标志位是否为低 为低 设置未完成 需从新设置 a8155 PA PA data 将 PA data 的内容送到 PA 写 PB PC 的函数 wr PB 和 wr PC 程序代码与 wr PA 类似 不再赘述 4 端口 PA 端口 PB 以及端口 PC 的中断设置函数 端口 PA 端口 PB 以及端口 PC 的中断设置函数完成各个端口的中断开启和关断 程 序代码如下 函数名称 Eint PA 输入函数 无 输出参数 无 功能说明 PA 中断允许 void Eint PA void 开端口 A 中断 ACC state flags 把状态标志字读到 ACC 便于进行位操作 Int flagA 1 state flags ACC 位操作完成 把 ACC 的内容写回状态标志字 a8155 CON state flags 写控制字 完成对 8155 的设置 函数名称 Dint PA 输入函数 无 输出参数 无 功能说明 PA 中断禁止 void Dint PA void 关端口 A 中断 ACC state flags 把状态标志字读到 ACC 便于进行位操作 第九单片机开发网 Int flagA 0 state flags ACC 位操作完成 把 ACC 的内容写回状态标志字 a8155 CON state flags 写控制字 完成对 8155 的设置 开关 PB 中断的函数 Eint PB Dint PB 和 Eint PA Dint PA 程序代码类似 不再赘述 端口 PC 上下半口配置函数 端口 PC 上下半口配置函数可实现端口 PC 上半口配置为 PA 状态输出和 PC 下半口配 置 为 PB 状态输出 程序代码如下 函数名称 PC0 PAint 输入函数 无 输出参数 无 功能说明 设置 PC 上半口为 PA 状态输出 PC0 INTRa PC1 BFa PC3 STBb void PC0 PAint void PC 上半口为 PA 状态输出 PC0 INTRa PC1 BFa PC3 ACC state flags 把状态标志字读到 ACC 便于进行位操作 Int flagA 1 IO flagC1 1 state flags ACC 位操作完成 把 ACC 的内容写回状态标志字 a8155 CON state flags 写控制字 完成对 8155 的设置 函数名称 PC4 PBint 输入函数 无 输出参数 无 功能说明 设置 PC 下半口为 PB 状态输出 PC4 INTRb PC5 BFb PC6 void PC4 PBint void PC 下半口为 PB 状态输出 PC0 INTRa PC1 BFa PC3 ACC state flags 把状态标志字读到 ACC 便于进行位操作 Int flagA 1 IO flagC1 1 第九单片机开发网 IO flagC 1 state flags ACC 位操作完成 把 ACC 的内容写回状态标志字 a8155 CON state flags 写控制字 完成对 8155 的设置 计数器设置函数 计数器设置函数完成计数器的起停和读写和输出模式设置 具体程序代码如下 函数名称 start timer 输入函数 无 输出参数 无 功能说明 开始计数器计数 void start timer void 开始计数器计数 ACC state flags 把状态标志字读到 ACC 便于进行位操作 Timer flag1 1 Timer flag2 1 state flags ACC 位操作完成 把 ACC 的内容写回状态标志字 a8155 CON state flags 写控制字 完成对 8155 的设置 函数名称 stop timer 输入函数 无 输出参数 无 功能说明 停止计数器计数 void stop timer void 停止计数器计数 ACC state flags 把状态标志字读到 ACC 便于进行位操作 Timer flag1 1 Timer flag2 0 state flags ACC 位操作完成 把 ACC 的内容写回状态标志字 a8155 CON state flags 写控制字 完成对 8155 的设置 函数名称 size zero stop 第九单片机开发网 输入函数 无 输出参数 无 功能说明 设定计数到零停止计数 void stop timer void 停止计数器计数 ACC state flags 把状态标志字读到 ACC 便于进行位操作 Timer flag1 1 Timer flag2 0 state flags ACC 位操作完成 把 ACC 的内容写回状态标志字 a8155 CON state flags 写控制字 完成对 8155 的设置 函数名称 rd timer 输入函数 无 输出参数 time 功能说明 读计数值 int rd timer void 读计数值 int time char timea time Timer B timea Timer A time time 8 time time return time 函数名称 setting timerout mode 输入函数 mode 范围 0 3 输出参数 无 功能说明 设定 输出模式 void setting timerout mode unsigned char mode 设定输出模式 Timer B mode 写控制字 第三章第三章 第九单片机开发网 实例 29 与 AT24 系列 EEPROM 接口及驱动程序 对 2402 的读写函数 include define DELAY TIME 60 经实验 不要小于 50 否则可能造成时序混乱 define FALSE 0 define TRUE 1 sbit SCL P1 2 I2C 信号线定义 sbit SDA P1 1 I2C 数据线定义 启动 I2C 总线的函数 当 SCL 为高电平时使 SDA 产生一个负跳变 void delayus unsigned int t while t 0 t void I2C Start void SDA 1 SCL 1 delayus DELAY TIME SDA 0 delayus DELAY TIME SCL 0 delayus DELAY TIME 终止 I2C 总线 当 SCL 为高电平时使 SDA 产生一个正跳变 void I2C Stop void SDA 0 SCL 1 delayus DELAY TIME SDA 1 delayus DELAY TIME SCL 0 delayus DELAY TIME 发送 0 在 SCL 为高电平时使 SDA 信号为低 void SEND 0 void SDA 0 SCL 1 delayus DELAY TIME SCL 0 delayus DELAY TIME 第九单片机开发网 发送 1 在 SCL 为高电平时使 SDA 信号为高 void SEND 1 void SDA 1 SCL 1 delayus DELAY TIME SCL 0 delayus DELAY TIME 发送完一个字节后检验设备的应答信号 bit Check Acknowledge void char F0 SDA 1 SCL 1 delayus DELAY TIME 2 F0 SDA delayus DELAY TIME 2 SCL 0 delayus DELAY TIME if F0 1 return FALSE return TRUE 向 I2C 总线写一个字节 void WriteI2CByte char b char i for i 0 i 8 i if b i else SEND 0 从 I2C 总线读一个字节 char ReadI2CByte void char b 0 i F0 for i 0 i 8 i SDA 1 释放总线 SCL 1 接受数据 delayus 10 F0 SDA 第九单片机开发网 delayus 10 SCL 0 if F0 1 b b 1 b b 0 x01 else b b 1 return b 读写 24c02 子函数 向 2402 写一个字节 void Write One Byte char addr char thedata bit acktemp 1 I2C Start 总线开始 WriteI2CByte 0 xa0 acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 WriteI2CByte addr 向 address 首地址开始写数据 acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 WriteI2CByte thedata 把 thedata 写进去 acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 I2C Stop 总线停止 向 2402 写一个数组 void Write A Page char buffer char m char addr bit acktemp 1 int i I2C Start WriteI2CByte 0 xa0 acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 WriteI2CByte addr address acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 for i 0 i m i WriteI2CByte buffer i if Check Acknowledge I2C Stop 第九单片机开发网 I2C Stop 从 2402 读一个字节 char Read One Byte char addr bit acktemp 1 char mydata I2C Start 启动 I2C 总线 WriteI2CByte 0 xa0 向 I2C 总线写一个字节 acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 WriteI2CByte addr 向 I2C 总线写一个字节 addr 是地址 acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 I2C Start WriteI2CByte 0 xa1 acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 mydata ReadI2CByte acktemp Check Acknowledge 发送完一个字节后检验设备的应答信号 return mydata I2C Stop 停止 I2C 总线 从 2402 读一个数组 void Read N Byt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新能源材料行业市场应用分析及发展趋势研究报告
- 错题集资源优化利用培训方案
- 舞台搭建施工合同范文及注意事项
- 城市生活污水处理设计技术方案
- 中小学数学学科复习指导方案
- 中小学教师教学评估方案与实施细则
- 中班美术活动《秋天的树叶》教案
- 大型零售企业员工激励机制方案
- 幼儿园兴趣班安全承诺范本
- 民族传统体育教学活动设计
- 围挡专项安全施工方案
- 国家食源性疾病监测工作手册模板
- 8D报告样板优秀课件
- 急诊医学PPT课件急性意识障碍
- SB/T 11082-2014单用途商业预付卡发卡企业信用评价标准
- GB/T 19188-2003天然生胶和合成生胶贮存指南
- 部编版语文九年级上册第五单元写作《论证要合理》课件
- 景物描写穿插在记叙文中课件
- 齐鲁工业大学-大学物理(下)期末复习总结
- GA∕T 1780-2021 多道心理测试实验室建设规范
- 陶瓷太阳能集热板
评论
0/150
提交评论