教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

(1小时学会C语言51单片机)C语言入门教程 - - - - 免费下载(4)

来源:网络收集 时间:2026-09-21
导读: { for(i = 0; i void disp(void) { P0 = SEG_TAB[ sec % 10 ];//显示秒的个位 P2 = 0X01; Delay(15); P2 = 0; P0 = SEG_TAB[ sec / 10 ];//显示秒的十位 P2 = 0X02; Delay(15); P2 = 0; P0 = SEG_TAB[ min % 10 ];/

{

for(i = 0; i < 125; i++); } }

void disp(void)

{

P0 = SEG_TAB[ sec % 10 ];//显示秒的个位 P2 = 0X01; Delay(15);

P2 = 0;

P0 = SEG_TAB[ sec / 10 ];//显示秒的十位 P2 = 0X02; Delay(15); P2 = 0;

P0 = SEG_TAB[ min % 10 ];//显示分的个位 P2 = 0X04; Delay(15); P2 = 0;

P0 = SEG_TAB[ min / 10 ];//显示分的十位 P2 = 0X08; Delay(15);

P2 = 0;

P0 = SEG_TAB[ hour % 10 ];//显示时的个位 P2 = 0X10; Delay(15);

P2 = 0;

P0 = SEG_TAB[ hour / 10 ];//显示时的十位 P2 = 0X20; Delay(15); P2 = 0; }

void main(void) { while( 1 ) {

disp( ); }

}

编译烧录芯片后,观察运行现象。矣...怎么一直显示12:00:00,难道是时钟没有启动?还是,另外的原因呢? 哦,原来是3个变量

sec,min,hour初始化后,其值一直没有改变!那我们怎么样才能让他改变数值呢?有的朋友一定会这么认为:让秒个位延时1秒,后加1,

而秒十位延时10秒后,再加1,一直加到6,分个位加1,依次类推...这样的想法是不错,但是朋友你有没有想过C语言的一般延时(除非你

把他放到中断里)极不精确!这样累计下来,一天24小时的误差,肯定很大很大,我曾经也用延时的方法写过时钟,1个小时误差8秒,那是

个什么概念!一天24小时就要24*8=192,约为3分钟,一个月就是10分钟...有没有其他的方法可以改进些呢?有!这里就要涉及到单片机中

另一个比较重要的核心部分:单片机的中断和定时器的运用!想写出比较精确(这里说的只的相对前面的做法而言比较精确而已,如果要做

更加精确的时钟,用时钟芯片比较好点,常用的有DS12887和DS1302等)的时钟程序,就一定要调用中断和定时器。还是大家先看看教材和书

吧,毕竟人家出的书,肯定比我要写的系统多了,下面我们再来简单的讲讲!

(六)

什么是中断呢?讲个比较通俗的例子:比如你正在家中看电视,突然电话响了,你的第一反应是什么?是不是先跑过去接电话!接完电话

后,继续看电视。这就是个中断的例子,中断是由电话引起了,你跑过去就是响应中断,接电话就是中断的处理!接完电话后,接续看电视, 即恢复中断,等待下个中断的到来!

但是这个好象和单片机没什么联系呀?有的朋友或许会这样疑问。是的。单片机当然不会看电视了,也不会接电话了 ! ^_^ 但是,类

比一下:比如单片机正在执行某个任务,突然要有更重要的事件,要求单片机响应,单片机就会应答响应,去执行更为重要的任务(中断处理 ),原来的任务就继续等待(现场的保护)。执行完更重要的任务后,回到中断的入口处,继续执行原来的任务(现场中断的恢复)。51系列

的单片机共有5个中断源,分别为:外中断0 、定时器T0中断、外中断1、定时器T1中断、串口中断。

或许,有些朋友已经大概领会了其中的意思,有些朋友还迷迷糊糊。不过不要紧,我们继续往下看,下面我们来讲讲单片机的定时器是什 么?如何工作的?定时器,大家从字面上就可以看出其大概的意思吧?简单的说:就是起定时作用!也就是让单片机计数。定时器分为:方式

0方式1、方式2和方式3等4种工作方式。有些朋友一定会问:定时器如何启动?风扇的定时器,相信大家一定都用过吧!但是单片机的定时器,

该如何启动呢?总不该也用手一拧定时器吧! ^_^ 当然不是,我们只要给单片机一些指令,就可以启动定时器了!下面我们就定时器0,来说

说怎么启动定时器0。

TMOD = 0X01;//设置定时器0 工作方式0 TH0 = (65536 - 5000) / 256;//载入高8位初值 TL0 = (65536 - 5000) % 256;//载入低8位初值 TR0 = 1; //启动定时器

^_^,简单吧,这样我们就可以把定时器启动了。其中TMOD为T/C方式控制寄存器:

D7 D6 D5 D4 D3 D2 D1 D0 _ _

GATE C/T M1 M0 GATE C/T M1 M0

|_________ __________| |_________ __________|

| T/C1 | | T/C0 |

C/T就是counter(记数器)和timer(定时器)的选择位,若值为1,则作计数器用。为0,则为定时期用!GATE为门控位。M1和M0工作方 式的选择:若M1=0;M0=0 则为方式0:13位定时/记数器。若M1=0;M0=1则为方式1,16定时/记数器。若M1=1;M0=0则为方式2,自动装载8位

定时/记数器。若M1=1;M0=1则为方式3,只适用于T/C0,2个8位定时/记数器。 说了一大堆,感到有点困惑了吧。那我们还是来说说上面的。TMOD= 0X01;//至于为什么是0X01,大家看:我们选择的是定时器0方式0,

所以T/C1全为0,而T/C0的M1为0。M0为1,所以D0-D7为0X01;0X01表示的是16进制数,这个大家应该都知道吧!还有D0-D7表示的是2进制数。 还需要转换一下! …… 此处隐藏:454字,全部文档内容请下载后查看。喜欢就下载吧 ……

(1小时学会C语言51单片机)C语言入门教程 - - - - 免费下载(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/604254.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)