完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include "reg52.h"
#include typedef unsigned char BYTE; typedef unsigned int WORD; #define uint unsigned int #define uchar unsigned char #define URMD 2 //0:使用定时器2作为波特率发生器 //1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器 //2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器 sfr T2H = 0xd6; //定时器2高8位 sfr T2L = 0xd7; //定时器2低8位 sfr AUXR = 0x8e; //辅助寄存器 void InitUart(); void SendUart(BYTE dat); uchar keyscan(); uchar num,temp,a; //sfr P0=0x80; sfr P0M1=0x93; sfr P0M0=0x94; //sfr P1=0x90; sfr P1M1=0x91; sfr P1M0=0x92; //sfr P2=0xA0; sfr P2M1=0x95; sfr P2M0=0x96; //sfr P3=0xB0; sfr P3M1=0xB1; sfr P3M0=0xB2; /*---------------------------------*/ void port_mode() // 端口模式 { P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00; } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //----------------------------------------- void main() { port_mode(); InitUart(); //串口初始化 while(1) { a=keyscan(); delay(100); if(a!=0x00) {SendUart(a); } //发送 else ; delay(100); } } /*---------------------------- 串口初始化 ----------------------------*/ void InitUart() { SCON = 0x5a; //设置串口为8位可变波特率 #if URMD == 0 T2L = 0xd8; //设置波特率重装值 T2H = 0xff; //115200 bps(65536-18432000/4/115200) AUXR = 0x14; //T2为1T模式, 并启动定时器2 AUXR |= 0x01; //选择定时器2为串口1的波特率发生器 #elif URMD == 1 AUXR = 0x40; //定时器1为1T模式 TMOD = 0x00; //定时器1为模式0(16位自动重载) TL1 = 0xd8; //设置波特率重装值 TH1 = 0xff; //115200 bps(65536-18432000/4/115200) TR1 = 1; //定时器1开始启动 #else TMOD = 0x20; //设置定时器1为8位自动重装载模式 AUXR = 0x40; //定时器1为1T模式 TH1 = TL1 = 0xdc; //9600 bps(256 - 11059200/32/9600) =256-36 //TH1 = TL1 = 0xfb; //115200 bps(256 - 18432000/32/115200) TR1 = 1; #endif } /*---------------------------- 发送串口数据 ----------------------------*/ void SendUart(BYTE dat) { while (!ti); //等待前面的数据发送完成 TI = 0; //清除发送完成标志 SBUF = dat; //发送串口数据 } uchar keyscan() { num=0x00; P2=0xfe; temp=P2; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xee:num=0xfe; break; case 0xde:num=0xfd; break; case 0xbe:num=0xfc; break; case 0x7e:num=0xfb; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } P2=0xfd; temp=P2; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xed:num=0xfa; break; case 0xdd:num=0xf9; break; case 0xbd:num=0xf8; break; case 0x7d:num=0xf7; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } P2=0xfb; temp=P2; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xeb:num=0xf6; break; case 0xdb:num=0xf5; break; case 0xbb:num=0xf4; break; case 0x7b:num=0xf3; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } P2=0xf7; temp=P2; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xe7:num=0xf2; break; case 0xd7:num=0xf1; break; case 0xb7:num=0xf0; break; case 0x77:num=0xef; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } return num; } |
|
相关推荐
|
|
1252 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1184 浏览 3 评论
2263 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1351 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1774 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 17:56 , Processed in 0.469412 second(s), Total 66, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号