6 -

《C语言编程实训》

实训指导书三

适应专业:应用电子技术

广州康大职业技术学院自动化系

二0 一0年十一月

《C语言编程实训》

实训三八红旗手 单片机时钟程序设计

一、实训目的

1.掌握LED显示、键盘、定时/计数器综合应用程序的设计方法;

2.熟悉运用PROTEUS ISIS仿真调试单片机时钟程序的基本操作。

二、实训设施

PROTEUS计算机软件、PC机

三、实训要求

1.使用C语言编程,实现由单片机控制LED数码管显示时、分、秒的电子时钟,并具有用按键修改时钟参数的功能(采用2个按键)。

2.写出1000字以上的实训总结报告(内容以单片机时钟程序设计及源程序清单为主)。

四、实训内容

1.设计单片机时钟硬件系统

(1)学习单片机时钟工作原理

① 6位七段LED显示器(共阳极数码管), 采用动态扫描的方法进行显示, 即逐个循环点亮各位显示器。这样虽然在任一时刻只有一位显示器被点亮,但是由于间隔时间较短(不超过10毫秒),且人眼具有视觉残留效应,因此看起来与全部显示器持续点亮效果完全一样。

② 动态扫描时, 单片机芯片的P1口(P1.0~P1.5)输出段控信号, P3口(P3.0~P3.5)输出位控信号, 当两口为高电平时,该字段就不显示;当两口为低电平时,就显示相应字段。

③ 时间校正的操作方法:两按键串联,接在单片机芯片的P2.4与P2.5之间, 按下按键K1,可调整“分”; 按下按键K2,可调整“时”。

(2)使用PROTEL绘制电路原理图

·从PROTEUS库中选取以下元器件:

7SEG-MPX2-CA(或7SEG-MPX6-CA):六位数码管

AT89C51:单片机

BUTTON:按键

CAP、CAP-ELEC:电容、电解电容

CRYSTAL:晶振

RES:电阻

·放置元器件

·放置电源和地(终端)

·连线

·元器件属性设置

·电气检测

绘制完全的电路原理如图3-1所示

图3-1 单片机电子时钟电路原理图

2.学习识读单片机时钟程序

程序清单:

#include
#define uint unsigned int
#define uchar unsigned char
void keys();
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;
sbit P33=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;
sbit key=P2^4;
sbit key1=P2^5;
uchar code table[10]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar hour=23,minute=59,second=0;
uint a,b,dd,ee,gg,hh;
static char count=0;
void delay(uint z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void int1() interrupt 1 using 2
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
for(;;)
{
a=hour/10;
b=hour%10;
dd=minute/10;
ee=minute%10;
gg=second/10;
hh=second%10;
keys();
P3=0X00;
P1=table[a];
P30=1;
delay(1);
P3=0X00;
P1=table[b];
P31=1;
delay(1);
P3=0X00;
P1=table[dd];
P32=1;
delay(1);
P3=0X00;
P1=table[ee];
P33=1;
de