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