当前位置:首页 » 编程语言 » 51单片机教程c语言

51单片机教程c语言

发布时间: 2023-07-04 15:07:25

1. 51单片机的4位数码管做简易秒表c语言程序

我写了个六位数码管的程序,放到这里让你参考一下,希望对你有用!
/*******************************************************************
数码管时钟秒表篇
功能简介:该程序有两个功能:时钟,秒表。key1,key2和key3键用来调节
时钟,根据LED的亮闪状态调节时钟(当八个LED全亮时为时钟显示状态,第一
个LED亮时为调节小时状态,第二个LED亮时为调节分钟状态,第三个LED亮时为
调节秒钟状态),key4键为秒表功能键。

实施步骤:第一步:开启定时器,完成数码管时钟走动功能;第二步:完成
数码管时钟调节功能;第三步:完成数码管秒表显示功能。

操作提示:功能键有四个,第二行第以列按键为调节键,第二行第二列按键
为增加数据键,第二行第三列按键为减少键,第二行第四列按键为秒表功能键。

********************************************************************
********************************************************************/
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^3;
sbit la=P2^6;
sbit wela=P2^7;
uchar code table1[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管位选编码
uchar code table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
0x79,0x71,0x00};
uchar temp; //temp为按键变量
int light,flag; //flag用来控制数码管显示的状态(显示时钟或者显示秒表),light用来控制时钟和秒表的led显示
uchar shi2,ge2,shi1,ge1; //这四个变量用来分离出实参的十位和个位
uchar num,num1,num2,num3; //num,num1用来计数,num2用来控制调节的时分秒,num3用来改变秒表状态下的显示状态
int miao,fen,shi; //时钟变量
uchar mfen,mmiao,mmmiao; //秒表变量
void delay(uint z)
{
uint i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
void timeinit()
{
TMOD=0x11;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TH1=(65536-4608)/256;
TL1=(65536-4608)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
}
void timedisplay0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
num++;
if(num==20)
{
num=0;
miao++; //开启时钟功能
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
}
void timedisplay1() interrupt 3
{
TH1=(65536-4608)/256;
TL1=(65536-4608)%256;
num1++;
if(num1==2)
{
num1=0;
mmmiao++;
if(mmmiao==100) //开启秒表功能
{
mmmiao=0;
mmiao++;
if(mmiao==60)
{
mmiao=0;
mfen++;
if(mfen==60)
mfen=0;
}
}
}
}
void display(uchar add,uchar date) //数码管显示信息函数(带有小数点)
{
shi2=date/10;
ge2=date%10;

P0=0xff;
wela=1;
P0=table1[add];
wela=0;
P0=0;
la=1;
P0=table2[shi2];
la=0;
delay(1);

P0=0xff;
wela=1;
P0=table1[add+1];
wela=0;
P0=0;
la=1;
P0=table2[ge2]|0x80;
la=0;
delay(1);
}
void display1(uchar add,uchar date) //数码管显示数据(不带有小数点)
{
shi1=date/10;
ge1=date%10;

P0=0xff;
wela=1;
P0=table1[add];
wela=0;
P0=0;
la=1;
P0=table2[shi1];
la=0;
delay(1);

P0=0xff;
wela=1;
P0=table1[add+1];
wela=0;
P0=0;
la=1;
P0=table2[ge1];
la=0;
delay(1);
}
void keyscan()
{
P3=0xfd;
temp=P3; //第二行功能键
if(temp!=0xfd)
{
delay(5);
if(temp!=0xfd)
{
beep=0;
switch(temp)
{
case 0xed: num2++; //第一个按键用来控制调节时,分,秒
TR0=0;
light=1;
if(num2==4)
{
num2=0;
light=0;
TR0=1;
}
break;
case 0xdd: if(num2==1) //第二键用来增加数据
{
shi++;
if(shi==24)
shi=0;
}
if(num2==2)
{
fen++;
if(fen==60)
fen=0;
}
if(num2==3)
{
miao++;
if(miao==60)
miao=0;
}
break;
case 0xbd: if(num2==1) //第三个键用来减小数据
{
shi--;
if(shi==-1)
shi=23;
}
if(num2==2)
{
fen--;
if(fen==-1)
fen=59;
}
if(num2==3)
{
miao--;
if(miao==-1)
miao=59;
}
break;
case 0x7d: flag=1; //第四个键用来开启秒表
num3++;
TR1=1;
if(num3==1)
mfen=mmiao=mmiao=0; //清除上次残留数据
if(num3==2)
TR1=0; //暂停秒表
if(num3==3)
{
mfen=mmiao=mmmiao=0; //秒表清零
TR1=0;
}
if(num3==4) //重新开启秒表
TR1=1;
if(num3==5) //暂停秒表
TR1=0;
if(num3==6) //切换为显示时钟状态
{
flag=0;
num3=0;
}
break;
}
while(temp!=0xfd)
{
temp=P3;
}
beep=1;
}
}
}
int main()
{
timeinit();
beep=1;
while(1)
{
keyscan();
if(light==0)
{
if(miao%2==0) //当数码管显示时钟状态时,八个led将以亮一秒灭一秒的状态循环下去
P1=0;
else
P1=0xff;
}
else
{
if(num2==1)
P1=0xfe;
if(num2==2)
P1=0xfd;
if(num2==3)
P1=0xfb;
}
if(flag==0) //显示时钟
{
display(1,shi);
display(3,fen);
display1(5,miao);
}
else //显示秒表
{
display(1,mfen);
display(3,mmiao);
display1(5,mmmiao);
}
}
return 0;
}

2. (1小时学会C语言51单片机)C语言入门教程

51作为学习入门,确实是最最基础的了,不过至少它可以让一个新手明白控制是怎么回事,反馈是怎么回事,程序是怎么下载进去运行,又是怎么控制到io输入输出的,如何去访问寄存器,掌握一套在嵌入式领悟最最基本的开发方法和学习思路。这部分如果有兴趣,建议学习时间不要超过两个月。
1.c语言,及部分汇编代码
2.用一个月时间看完做完郭天祥的十天学会51单片机
3.买一块开发板
4.学习能够看懂看会原理图
5.掌握搜集资料,datasheet查找阅读英文手册的能力
6.自己动手动手动手做一个简单的功能
最后,我其实不建议51入门,可以直接stm32,虽然他还是单片机。不过十年前我当初也是51入门的,乐此不疲。至于忽悠你什么协议,内核,我觉得让一个大一嵌入式新手学这些,无疑没有基础就想建高楼,所以踏踏实实从基础开始,大学就是注重基础,学习能力!

3. 51单片机扩展外部数据存储器6264,怎么用C语言实现对其操作

2.扩展RAM编程基础
(1)弄清扩展器件的地址
在图7.2.5中,U3的ABC接单片机A13,A14,A15,所以片选信号对应地址最高位,即:“CBAxxxxx xxxxxxxx”(x为任意)。U4片选接CS1,即Y1,CBA=001,可得U4的地址范围是0x2000~0x3fff。U5接CS3,即Y3,CBA=011,地址为0x6000~0x7fff。U6接CS4,即Y4,CBA=100,地址为0x8000~0x9fff。知道了器件地址,可以利用直接地址、外部数据指针来访问存储器。通过设置,也可以让编译器在扩展RAM中自动分配存储单元。
(2)直接地址访问
①向U4写数据:
XBYTE[0x2000+addr]=dat; //addr为U4内部地址,取值为0~0x1fff;dat为数据。
②读出U4数据:
dat=XBYTE[0x2000+addr];
也可以用页访问方式。页访问方式,实际就是先把16位地址高8位送P2口,通过低8位地址读写。
③按页读写U4:
P2=0x20+page; // page为页,取值为0x00~0x1F。
PBYTE[addr]=dat; // addr为页内地址,取值为0x00~0xFF。
dat=PBYTE[addr];
④读U6
dat=XBYTE[0x8000];//读U6,地址取0x8000~0x9fff任何值,都一样。
⑤写U5
XBYTE[0x6000]=dat; //写U5,地址取0x6000~0x7fff任何值,都一样。
(3)数据指针
如,读写U4,可以这样写:
unsigned char xdata *p=0x3000; //声明指针p,并初始指向0x3000单元
x=*p; //读指针所指向的位置
p=p+1; //指针指向下一单元
*p=0x16; //向指针所指向的位置写入数据
(4)让编译器自动分配存储空间
①为了能让编译器自动分配存储空间,并使用扩展RAM,必须设置扩展RAM地址。在Keil编程软件中,点击工具栏快捷图标“ ”,弹出目标选项对话框。按图7.2.6所示,设置RAM起始地址和长度。
②变量声明时使用xdata关键词。如:
unsigned char xdata a;//变量a使用扩展RAM空间。
特别注意,扩展RAM直接地址访问方式与自动分配存储空间方式最好不要混用,否则可能产生冲突。
摘自《单片机控制装置安装与调试》下册,雷林均主编

4. 51单片机 ,设计一个跑马灯程序,用软件延时,p0输出,怎么设计c语言,用p1口的开关控制灯循环的速率

51单片机是单片机接触最早的,下边这个程序希望能帮到你。(只有主函数,就不进行硬件什么定义以及头文件包含什么的了)

void delay(int times){//延时函数,times控制延时时间
int i, j;

for(i = 0; i < times; i++)

for(j = 0; j < 210; j++)

;

}
int main(void){
unsigned char data, i;
while(1){

data = P1;//把开关值读回来
for(i = 0; i < 8; i++){
P0 = ~(0x01 << i); //某位为高电平某位对应的灯亮
delay(data);//把读取的开关值用来控制延时

}
}
}

5. 51单片机c语言 _nop_()是一个空指令短时间延时的空几个机器周期

这个_nop_()等效与汇编里面的,NOP指令,也就是空一个机器周期,如果是传统51单片机的话,等于空12个时钟周期【即一个机器周期】山前,操作方法如下:

1、首先,可以利用keil来进行模拟实验,观察软件所显示的数值,然后再进行相关的运算,即可得出结果侍唯猛。

6. 新概念51单片机C语言教程的作品目录

第1篇入门篇
1.1单片机概述
1.1.1什么是单片机
1.1.2单片机标号信息及封装类型
1.1.3单片机能做什么
1.1.4如何开始学习单片机
1.251单片机外部引脚介绍
1.3电平特性
1.4二进制与十六进制
1.4.1二进制
1.4.2十六进制
1.5二进制的逻辑运算
1.5.1与
1.5.2或
1.5.3非
1.5.4同或
1.5.5异或
1.6单片机的C51基础知识介绍
1.6.1利用C语言开发单片机的优点
1.6.2C51中的基本数据类型
1.6.3C51数据类型扩充定义
1.6.4C51中常用的头文件
1.6.5C51中的运算符
1.6.6C51中的基础语句
1.6.7学习单片机应该掌握的主要内容
2.1Keil工程建立及常用按钮介绍
2.1.1Keil工程的建立
2.1.2常用按钮介绍
2.2点亮第一个发光二极管
2.3while语句
2.4for语句及简单延时语句
2.5Keil仿真及延时语句的精确计算
2.6不带参数函数的写法及调用
2.7带参数函数的写法及调用
2.8利用C51库函数实现流水灯
第2篇内外部资源操作篇
3.1数码管显示原理
3.2数码管静态显示
3.3数码管动态显示
3.4中断概念
3.5单片机的定时器中断
4.1独立键盘检测
4.2矩阵键盘检测
5.1模拟量与数字量概述
5.2A/D转换原理及参数指标
5.3ADC0804工作原理及其实现方法
5.4D/A转换原理及其参数指标
5.5DAC0832工作原理及实现方法
5.6DAC0832输出电流转换成电压的方法
第6章串行口通信原理及操作流程
6.1并行与串行基本通信方式
6.2RS-232电平与TTL电平的转换
6.3波特率与定时器初值的关系
6.451单片机串行口结构描述
6.5串行口方式1编程与实现
6.6串行口打印在调试程序中的应用
第7章通用型1602,12232,12864液晶操作方法
7.1液晶概述
7.2常用1602液晶操作实例
7.3常用12232液晶操作实例
7.4常用12864液晶操作实例
第8章I2C总线AT24C02芯片应用
8.1I2C总线概述
8.2单片机模拟I2C总线通信
8.3E2PROMAT24C02与单片机的通信实例
第9章基础运放电路专题
9.1运放概述及参数介绍
9.2反相放大器
9.3同相放大器
9.4电压跟随器
9.5加法器
9.6差分放大器
9.7微分器
9.8积分器
第3篇提高篇
第10章定时器/计数器应用提高
10.1方式0应用
10.2方式2应用
10.3方式3应用
10.452单片机定时器2介绍
10.5计数器应用
第11章串行口应用提高
11.1方式0应用
11.2方式2和方式3应用
11.3单片机双机通信
11.4单片机多机通信
第12章指针
12.1指针与指针变量
12.1.1内存单元、地址和指针
12.1.2指针变量的定义、赋值与引用
12.2指针变量的运算
12.3指针与数组
12.3.1指针与一维数组
12.3.2指针与多维数组
12.4指针与函数
12.4.1指针作为函数的参数
12.4.2指向函数的指针
12.4.3指针型函数
12.5指针与字符串
12.5.1字符串的表达形式
12.5.2字符指针作为函数参数
12.5.3使用字符指针与字符数组的区别
12.6指针数组与命令行参数
12.6.1指针数组的定义和使用
12.6.2指向指针的指针
12.6.3指针数组作为main()函数的命令行参数
12.7指针小结
12.7.1指针概念综述
12.7.2指针运算小结
12.7.3等价表达式
12.8C51中指针的使用
12.8.1指针变量的定义
12.8.2指针应用
第13章STC系列51单片机功能介绍
13.1单片机空闲与掉电模式应用
13.2“看门狗”概念及其应用
13.3用软件实现系统复位
13.4内部扩展RAM的应用
13.5扩展P4口的应用
13.6内部E2PROM的应用
13.7STC89系列单片机内部A/D应用
13.8STC12系列单片机内部A/D应用
13.9STC12系列单片机的PCA/PWM介绍
13.10STC12系列单片机的SPI接口介绍
13.11STC12系列单片机的“576MHz”超速运行
第4篇实战篇
第14章利用51单片机的定时器设计一个时钟
14.1如何从矩阵键盘中分解出独立按键
14.2原理图分析
14.3实例讲解
第15章使用DS12C887时钟芯片设计高精度时钟
15.1时钟芯片概述
15.2DS12C887时钟芯片介绍
15.3如何用TX-1C实验板扩展本实验
15.4原理图分析
15.5实例讲解
第16章使用DS18B20温度传感器设计温控系统
16.1温度传感器概述
16.2DS18B20温度传感器介绍
16.3实例讲解
第17章太阳能充/放电控制器
17.1控制器原理图分析
17.2控制器板上元件介绍
17.3实例讲解
第18章VC、VB(MSCOMM控件)与单片机通信实现温度显示
18.1VCMSCOMM控件与单片机通信实现温度显示
18.2VBMSCOMM控件与单片机通信实现温度显示
第5篇拓展篇
第19章使用Protell99绘制电路图全过程
19.1绘制电路板概述
19.2建立工程
19.3制作元件库
19.4添加封装及制作PCB封装库
19.5错误检查及生成PCB
19.6布线电气特性设置
19.7自动布线和手动布线
第20章ISD400x系列语音芯片应用
20.1ISD400x系列语音芯片介绍
20.2ISD400x系列语音芯片操作规则
20.3ISD400x系列语音芯片应用实现
第21章电机专题
21.1直流电机原理及应用
21.2步进电机原理及应用
21.3舵机原理及其应用
第22章常用元器件介绍
22.1二极管
22.2电容
22.3场效应管
22.4光耦
22.5蜂鸣器
22.6继电器
22.7自恢复保险
22.8瞬态电压抑制器
22.9晶闸管(可控硅)
22.10电荷泵
第23章直流稳压电源专题
23.1整流电路
23.2滤波电路
23.3稳压电路
23.4集成稳压模块的使用
23.5串联开关型稳压电源
第24章运放扩展专题
24.1简单低通滤波器
24.2“电流-电压”转换电路
24.3光电放大器
24.4精密电流源
24.5可调参考电压源
24.6复位稳定放大器
24.7模拟乘法器
24.8全波整流器和平均值滤波器
24.9正弦波振荡器
24.10三角波发生器
24.11自动跟踪对称电源
24.12可调实验电源
24.13运放相关术语表
附录A天祥电子开发实验板简介
A.1TX-1C51单片机开发板(配套详细视频教程)
A.2AVR单片机开发板(配套详细视频教程)
A.3PIC单片机开发板(配套详细视频教程)
A.4J-Link全功能ARM仿真器
A.5三星S3C44B0ARM7入门级开发板
A.6三星S3C44B0ARM7提高级开发板
A.7TX-51STAR51单片机开发板(配套详细视频教程)
参考文献

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:642
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:368
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:89
php微信接口教程 发布:2025-04-16 17:07:30 浏览:312
android实现阴影 发布:2025-04-16 16:50:08 浏览:795
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:348
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:213
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:819
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:369
土压缩的本质 发布:2025-04-16 16:13:21 浏览:596