# 51单片机的一些小例程
## CodeBlocks配置使用Keil_C51编译器单片机编译设置方法
- [Keil uVision5 C51](https://www.keil.com/download/product/)编译器, 安装目录
C:\Keil
- CodeBlocks编译器设置,选择 Keil C51 Compiler
```
编译器目录填 C:\Keil\C51
搜索目录-编译器头文件 C:\Keil\C51\INC
搜索目录-编译器库文件 C:\Keil\C51\LIB
```
### 转换 HEX 工具配置
```
名称: Keil_C51编译_生成HEX
可执行程序: OH51.EXE
$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).omf
```
---
## CodeBlocks + [SDCC开源编译器](http://sdcc.sourceforge.net) C51单片机编译设置
:100: SDCC-小型设备C编译器,是一个可重新定位的优化标准C(ANSI C89,ISO C99,ISO C11)编译器套件,针对基于Intel MCS51的微处理器(8031,8032,8051,8052 等),
Maxim(以前的Dallas)DS80C390变体, Freescale(以前的摩托罗拉)基于HC08 (hc08,s08), 基于Zilog Z80的MCU (z80,z180,gbz80,Rabbit 2000/3000,Rabbit 3000A,TLCS-90),Padauk(pdk14,pdk15)和 STMicroelectronics STM8。
正在开展支持 Padauk(pdk13),Microchip PIC16和PIC18 目标的工作。它可以重新定位到其他微处理器。
- SDCC-小型设备C编译器 下载网址: http://sdcc.sourceforge.net
- 推荐安装目录 C:\sdcc
- CodeBlocks编译器设置,选择 SDCC Compiler
```
编译器目录填 C:\sdcc
搜索目录-编译器头文件 C:\sdcc\include
搜索目录-编译器库文件 C:\sdcc\lib
# CodeBlocks 新建项目,选 MCS51 Project,默认选择 SDCC Compiler,模版会自动添加 转换C51使用HEX文件 的命令
cmd /c "packihx <$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).ihx >$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).hex"
```
---
### 1. LED闪烁实验 和 跑马灯
### 2. 使用蜂鸣器演奏音乐
```c
// 音乐播放器 : 挥着翅膀的女孩 同一首歌 两只蝴蝶
void main()
{
InitialSound();
while (1) {
keypros();
// K1 按键点歌 两只蝴蝶
if (key_id == 1) {
Play(Music_Two, 0, 3, 360);
Delay1ms(500);
key_id = 0;
}
// K2 按键点歌 挥着翅膀的女孩
// K3 按键点歌 同一首歌
// K4 beep 声音
}
}
```
### 3. 动态数码管显示
```c
sbit LSA = P2 ^ 2;
sbit LSB = P2 ^ 3;
sbit LSC = P2 ^ 4; //控制38译码器的Y0输出低电平
u8 code smgduan[] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, // 0 1 2 3 4
0x6d, 0x7d, 0x07, 0x7f, 0x6f, // 5 6 7 8 9
0x77, 0x7c, 0x39, 0x5e, 0x79, // A B C D E
0x71, 0x00 // F NULL
};
```
- 文件: * 7段数码管-26字母表.xls * 用来扩展自定义字母和符号
### 4. 矩阵按键实验
```c
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
delay(1000);//延时10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测
{
delay(1000);
a++;
}
}
}
}
```
### 5. 8*8LED点阵-显示文字实验
```c
void Hc595SendByte(u8 dat) // 函数向74HC595发送一个字节的数据
{
u8 a;
SRCLK = 0;
RCLK = 0;
for (a = 0; a < 8; a++) {
SER = dat >> 7; // 获取最高位 0xA3 : 1010 0011 等于 1
dat <<= 1; // 数据移位,移除最高位1补0 0100 0110
SRCLK = 1; // 升沿时数据寄存器的数据移位
_nop_();
_nop_(); // 延时
SRCLK = 0; // 下降沿移位寄存器数据不变
}
RCLK = 1; // 上升沿时移位寄存器的数据进入数据存储寄存器
_nop_();
_nop_(); // 延时
RCLK = 0; // 下降沿时存储寄存器数据不变
}
```
### 6. 定时器和中断
```c
// 中断法使用定时器
void Timer0Init(void) //2毫秒@12.000MHz
{
EA = 1 ; // 使能总中断
TMOD &= 0xFC; //设置定时器模式
TMOD |= 0x01;
TH0 = (655536 - 2000) / 256; //定时 2ms
TL0 = (655536 - 2000) % 256;
ET0 = 1; // 打开定时器0
TR0 = 1; //定时器0开始计时
}
void inter_timer0() interrupt 1
{
static unsigned int cnt;
TH0 = (655536 - 2000) / 256;
TL0 = (655536 - 2000) % 256;
cnt++;
if (cnt >= 1000) { // 2ms × 1000 = 2秒触发一次
cnt = 0;
P2 = ~P2;
}
}
```
### 7. 按键控制外部中断
```c
#include <reg51.h>
// K3 独立按键 触发外部中断 INT0
//External interrupt0 service routine //外部中断0服务程序
void exint0() interrupt 0 //(location at 0003H)
{
P2++; // LED组灯在 P2 I/O 端口
}
void main()
{
IT0 = 1; //set INT0 int type //设置INT0 int类型(1:下降 0:低级别)
EX0 = 1; //enable INT0 interrupt //启用INT0中断
EA = 1; //open global interrupt switch //打开全局中断开关
while (1);
}
```
### 8. 初识LCD1602液晶模块
```c
#define LcdDB P0 // D0-D7 为8位双向数据线,传输数据或命令
sbit LcdRS = P2 ^ 6; // RS 为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存
sbit LcdRW = P2 ^ 5; // R/W 为读写信号线, 高电平时进行读操作,低电平时进行写操作
sbit LcdEN = P2 ^ 7; // E 为使能端,当高电平跳变成低电平时,液晶模块执行命令
void Lcd_Init(); // LCD1602初始化函数
void LcdWrDat(uchar dat); // LCD1602写8bit数据函数
void LcdWrCmd(uchar cmd); // LCD1602写入8bit命令函数
void LcdBusy(); // 检测忙信号,等待
void Lcd_Show(uchar x, uchar y); // 显示坐标: x为横坐标; y为竖坐标 y=0; 第一行 y=1; 第二行
void Lcd_Init()
{
LcdWrCmd(0x38); // 写指令38H: 显示模式设置
LcdWrCmd(0x0C); // 写指令0CH: 开显示,不显示光标
LcdWrCmd(0x06); // 写指令06H: 光标移动设置
LcdWrCmd(0x01); // 写指令01H: 显示清屏
// 写指令08H 显示关闭
}
void LcdWrDat(uchar dat)
{
LcdBusy(); // 检测忙信号
LcdRS = 1; // 高电平时选择数据寄存器
LcdRW = 0; // 低电平时进行写操作
LcdDB = dat; // 写数据
LcdEN = 1; // 电平下降沿,使能
LcdEN = 0;
}
```
---
### :100: HC6800-ES V2.0光盘资料(180515)
```
V2.0链接: 链接:https://pan.baidu.com/s/1nJyHVv4effJ5y5ffUJFMoQ
提取码:quux
```
### :+1: 普中51单片机开发版 stc89c52芯片实验板DIY套件
![](https://img.alicdn.com/imgextra/i2/222939413/TB2xOgJd67nBKNjSZLeXXbxCFXa_!!222939413.jpg)
没有合适的资源?快使用搜索试试~ 我知道了~
51单片机的一些小例程.zip
共556个文件
c:334个
h:108个
uvproj:39个
需积分: 5 0 下载量 134 浏览量
2024-01-13
22:20:32
上传
评论
收藏 2.47MB ZIP 举报
温馨提示
基于51单片机。CodeBlocks + Keil_C51编译器 C51单片机学习; CodeBlocks + SDCC开源编译器 C51单片机编译。CodeBlocks + Keil_C51编译器 C51单片机学习; CodeBlocks + SDCC开源编译器 C51单片机编译。CodeBlocks + Keil_C51编译器 C51单片机学习; CodeBlocks + SDCC开源编译器 C51单片机编译。CodeBlocks + Keil_C51编译器 C51单片机学习; CodeBlocks + SDCC开源编译器 C51单片机编译。CodeBlocks + Keil_C51编译器 C51单片机学习; CodeBlocks + SDCC开源编译器 C51单片机编译。CodeBlocks + Keil_C51编译器 C51单片机学习; CodeBlocks + SDCC开源编译器 C51单片机编译。CodeBlocks + Keil_C51编译器 C51单片机学习; CodeBlocks + SDCC开源编译器 C51单片机编译。CodeBlocks + Keil_C51编译
资源推荐
资源详情
资源评论
收起资源包目录
51单片机的一些小例程.zip (556个子文件)
crtbank.asm 3KB
crtxinit.asm 3KB
crtxpush.asm 2KB
crtxpop.asm 2KB
gptr_cmp.asm 2KB
crtxstack.asm 2KB
crtxclear.asm 2KB
crtstart.asm 2KB
crtxpushr0.asm 2KB
crtxpopr0.asm 2KB
crtclear.asm 2KB
crtcall.asm 2KB
crtpagesfr.asm 1KB
main.c.bak 815B
printf_fast.c 39KB
printf_large.c 19KB
_mullong.c 13KB
_setjmp.c 11KB
_gptrget.c 9KB
main.c 9KB
main.c 8KB
_gptrput.c 8KB
expf.c 7KB
printf_tiny.c 7KB
_fsdiv.c 7KB
_divulong.c 6KB
time.c 6KB
_modulong.c 6KB
_fsmul.c 6KB
logf.c 6KB
ser_ir_cts_rts.c 5KB
printfl.c 5KB
_mulint.c 5KB
_memset.c 5KB
_fsadd.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
LCD1602.c 5KB
_modslong.c 5KB
LCD1602.c 5KB
_divslong.c 4KB
_ser.c 4KB
main.c 4KB
realloc.c 4KB
malloc.c 4KB
main.c 4KB
_moduint.c 4KB
_divsint.c 4KB
_autobaud.c 4KB
_divuint.c 4KB
ser_ir.c 4KB
_modsint.c 4KB
_logexpf.c 4KB
_gptrgetc.c 4KB
IR.c 3KB
IR.c 3KB
IR.c 3KB
IR.c 3KB
main.c 3KB
main.c 3KB
test_ds1302.c 3KB
strtoul.c 3KB
serial.c 3KB
ds1302.c 3KB
_fslt.c 3KB
DS1302.c 3KB
main.c 3KB
DS1302.c 3KB
_fs2ulong.c 3KB
main.c 3KB
_ulong2fs.c 3KB
_ltoa.c 3KB
sincoshf.c 3KB
asincosf.c 3KB
D9-D16_LED_switch.c 3KB
sincosf.c 3KB
_fs2schar.c 3KB
matrix_key.c 3KB
tancotf.c 3KB
_rrulonglong.c 3KB
D1-D16_LED.c 3KB
_fseq.c 3KB
_fs2slong.c 3KB
_rrslonglong.c 3KB
_fsneq.c 3KB
atanf.c 3KB
mbrtowc.c 3KB
dynamic_digital_tube_display.c 3KB
_atof.c 3KB
_fsreturnval.c 2KB
共 556 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
白如意i
- 粉丝: 5403
- 资源: 3231
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功