论文C51典型例程_第1页
论文C51典型例程_第2页
论文C51典型例程_第3页
论文C51典型例程_第4页
论文C51典型例程_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一 把 P1 口的 8 个 LED 中 4 个点亮 4 个熄灭 include void main P1 0 xaa while 1 简单原理图如下 有另外 4 个 LED 灯没有画出来 实际应该是 8 个灯的 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0 0 AD0 39 P0 1 AD1 38 P0 2 AD2 37 P0 3 AD3 36 P0 4 AD4 35 P0 5 AD5 34 P0 6 AD6 33 P0 7 AD7 32 P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 7 RD 17 P3 6 WR 16 P3 5 T1 15 P2 7 A15 28 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 U1 AT89C51 C1 10p C2 10p X1 CRYSTAL GND R1 10k R2 10k R3 10k R4 10k VCC D1 LED BLUE D2 LED BLUE D3 LED RED D4 LED RED 二 间隔 1s 闪烁 include sbit d1 P1 0 void main unsigned int i j while 1 d1 0 点亮 for i 1000 i 0 i 延时 1s 内循环一直是 110 外循环 1000 表示 1000ms for j 110 j 0 j 即 1s 设为 500 表示延时 0 5s d1 1 熄灭 for i 1000 i 0 i for j 110 j 0 j 三 独立按键测试 void timer0 void interrupt 1 中断号为 1 static unsigned char wei 0 unsigned char weixuan 0 x01 TH0 0 xf4 TL0 0 x48 重新给定时器赋值 BCD P0 DISP wei 送显示数据 DUAN LE 1 开段控制线 DUAN LE 0 P0 weixuan WEISHU wei 0 void main void WEI LE 0 DUAN LE 0 锁存复位 TMOD 0 x01 定时器 0 工作于方式 1 TH0 0 xf4 TL0 0 x48 定时 3MS 定义数码管显示扫描时间 TR0 1 允许定时器工作 ET0 1 允许定时器中断 EA 1 开中断 while 1 if K T0 0 Bit0 1 if K T1 0 Bit0 2 if K INT0 0 Bit0 3 if K INT1 0 Bit0 4 读按键值 4 4 矩阵键盘检测和键值的数码管显示 include 共阳极七段数码管显示对应段查询表 数字 0 9 分别对应 code table 0 9 分别对应 a b c d e f g dp p00 p01 p02 p03 p04 p05 p06 p07 unsigned char code code table 数码管十六进制编码表 0 xC0 0 xF9 0 xA4 0 xB0 0 x99 0 x92 0 x82 0 xF8 0 x80 0 x90 0 x88 0 x83 0 xc6 0 xa1 0 x86 0 x8e unsigned char code m ucKeyTab 键盘十六进制编码表 0 xde 0 xe7 0 xd7 0 xb7 0 xeb 0 xdb 0 xbb 0 xed 0 xdd 0 xbd 0 x77 0 x7b 0 x7d 0 x7e 0 xbe 0 xee define WEISHU 8 修改该处可以做到不同位数的动态显示 本程序可以做 到最多 8 个 define KEY STATUS P2 键盘引脚 sbit WEI LE P1 1 定义位控制线 sbit DUAN LE P1 0 定义段控制线 unsigned char DISP 8 定义显示缓存器 unsigned char Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 名称 Delay 说明 程序延时 参数 无 返回 无 void Delay unsigned char a b for a 0 a 255 a for b 0 b 255 b 将 int 型转换为 4 位 BCD 码 void BCD DISP 0 code table Bit0 DISP 1 code table Bit1 DISP 2 code table Bit2 DISP 3 code table Bit3 DISP 4 code table Bit4 DISP 5 code table Bit5 DISP 6 code table Bit6 DISP 7 code table Bit7 名称 KeyCheck 说明 键盘检测 参数 无 返回 键盘码值 若无键按下则返回 16 unsigned char KeyCheck unsigned char a b for a 0 a 4 a 循环 4 次 switch a 改变键盘扫描码 case 0 KEY STATUS 0 xef break case 1 KEY STATUS 0 xdf break case 2 KEY STATUS 0 xbf break case 3 KEY STATUS 0 x7f break b KEY STATUS if ba 16 a 根据键盘码判断那个键按下 if b m ucKeyTab a return a return 16 Timer 0 定时中断处理 void timer0 void interrupt 1 static unsigned char wei 0 unsigned char weixuan 0 x01 TH0 0 xf4 TL0 0 x48 重新给定时器赋值 BCD P0 DISP wei 送显示数据 DUAN LE 1 开段控制线 DUAN LE 0 P0 weixuan WEISHU wei 0 void main void unsigned char ucKey Bit0 0 Bit1 0 Bit2 0 Bit3 0 Bit4 0 Bit5 0 Bit6 0 Bit7 0 WEI LE 0 DUAN LE 0 锁存复位 TMOD 0 x01 定时器 0 工作于方式 1 TH0 0 xf4 TL0 0 x48 定时 3MS 定义数码管显示扫描时间 TR0 1 允许定时器工作 ET0 1 允许定时器中断 EA 1 开中断 while 1 ucKey KeyCheck 获得键盘值 if ucKey 16 判断是否有键按下 若有则将它在数码管显示出来 Bit7 Bit6 在数码管显示键盘值 Bit6 Bit5 Bit5 Bit4 Bit4 Bit3 Bit3 Bit2 Bit2 Bit1 Bit1 Bit0 Bit0 ucKey Delay Delay 五 1602 字符液晶测试 include reg51 h define uchar unsigned char define uint unsigned int sbit LCM RW P2 1 定义引脚 sbit LCM RS P2 0 sbit LCM E P2 2 sbit WEI LE P1 1 定义位控制线 sbit DUAN LE P1 0 定义段控制线 define LCM Data P0 define Busy 0 x80 用于检测 LCM 状态字中的 Busy 标识 void WriteDataLCM uchar WDLCM void WriteCommandLCM uchar WCLCM BuysC uchar ReadDataLCM void uchar ReadStatusLCM void void LCMInit void void DisplayOneChar uchar X uchar Y uchar DData void DisplayStrChar uchar X uchar Y uchar DData void Delay5Ms void void Delay400Ms void uchar code cdle net YM100 V4 0 uchar code email cany 999 void main void P0 0 xFF DUAN LE 1 DUAN LE 0 P0 0 x00 WEI LE 1 WEI LE 0 关闭数码管显示 Delay400Ms 启动等待 等 LCM 讲入工作状态 LCMInit LCM 初始化 Delay5Ms 延时片刻 可不要 DisplayStrChar 2 0 cdle net DisplayStrChar 0 1 email while 1 写数据 void WriteDataLCM uchar WDLCM ReadStatusLCM 检测忙 LCM Data WDLCM LCM RS 1 LCM RW 0 LCM E 0 若晶振速度太高可以在这后加小的延 时 LCM E 0 延时 LCM E 1 写指令 void WriteCommandLCM uchar WCLCM BuysC BuysC 为 0 时忽略 忙检测 if BuysC ReadStatusLCM 根据需要检测忙 LCM Data WCLCM LCM RS 0 LCM RW 0 LCM E 0 LCM E 0 LCM E 1 读数据 uchar ReadDataLCM void LCM RS 1 LCM RW 1 LCM E 0 LCM E 0 LCM E 1 return LCM Data 读状态 uchar ReadStatusLCM void LCM Data 0 xFF LCM RS 0 LCM RW 1 LCM E 0 LCM E 0 LCM E 1 while LCM Data 检测忙信号 return LCM Data void LCMInit void LCM 初始化 LCM Data 0 WriteCommandLCM 0 x38 0 三次显示模式设置 不检测 忙信号 Delay5Ms WriteCommandLCM 0 x38 0 Delay5Ms WriteCommandLCM 0 x38 0 Delay5Ms WriteCommandLCM 0 x38 1 显示模式设置 开始要求每次 检测忙信号 WriteCommandLCM 0 x08 1 关闭显示 WriteCommandLCM 0 x01 1 显示清屏 WriteCommandLCM 0 x06 1 显示光标移动设置 WriteCommandLCM 0 x0C 1 显示开及光标设置 按指定位置显示一个字符 void DisplayOneChar uchar X uchar Y uchar DData Y X 限制 X 不能大于 15 Y 不能大于 1 if Y X 0 x40 当要显示第二行时地址码 0 x40 X 0 x80 算出指令码 WriteCommandLCM X 0 这里不检测忙信号 发送地 址码 WriteDataLCM DData 按指定位置显示一串字符 void DisplayStrChar uchar X uchar Y uchar DData uchar ListLength ListLength 0 Y X 限制 X 不能大于 15 Y 不能大于 1 while DData ListLength 0 若到达字串尾则退出 if X 0 xF X 坐标应小于 0 xF DisplayOneChar X Y DData ListLength 显示单个字符 ListLength X 5ms 延时 void Delay5Ms void uint TempCyc 5552 while TempCyc 400ms 延时 void Delay400Ms void uchar TempCycA 5 uint TempCycB while TempCycA TempCycB 7269 while TempCycB 六 红外测试 Timer 1 定时中断处理 void timer1 void interrupt 3 static unsigned char wei 0 unsigned char weixuan 0 x01 TH1 0 xf4 TL1 0 x48 重新给定时器赋值 BCD P0 DISP wei 送显示数据 DUAN LE 1 开段控制线 DUAN LE 0 P0 weixuan WEISHU wei 0 void delay unsigned int value 延时副程式 while value 0 value 10US 延时 void DL void unsigned char i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论