湘潭大学单片机课程设计_湘潭大学单片机第二章
湘潭大学单片机课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“湘潭大学单片机第二章”。
单
片
机
课
程
设
计
设计题目:简易频率计数器姓名:学号:
班级:09级电子信息工程一班指导老师:粟建新
一、实验目的1.要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。
2.熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。
二、实验要求
自制一个单片机最小系统,包括串口下载、复位电路,采用外部计数器T0或T1作为外部频率输入,外部频率由信号源提供,计算出来的频率显示在四位一体的数码管上。
三、实验器材
单片机'STC89C54RD+一个,晶振一个,电容3个,电阻3个,排阻一个(由于实验室不提供排阻,实验过程中用了10个10千欧姆的电阻代替),4位一体数码显示管一个,按钮1个。
四、实验原理图
五、硬件连线
1.将P0口与4位一体数码管的ABCDEFG和DP相连;
2.将P2口的2.0,2.1,2.2分别与数码管的S1,S2,S3相连;
3.引出14做激励输入口。
六、程序设计内容
1.定时/计数器T0 和T1 的工作方式设置,由图可知,T0 是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:T0 的最大计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个 数,即为频率值。所以T1 工作在定时状态下,每定时1秒钟到,就停止T0 的计数,而从T0 的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。
2.T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20 次,即可完成1 秒的定时功能。
七、C语言源程序
#include//头文件端口声明
#define uchar unsigned char//变量宏定义
#define uint unsigned int
unsigned char code table2[]={ //共阳极0~f数码管编码
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uintnumber1[4]={0,0,0,0};
uint count=0;//定义脉冲计数变量
sbit K1=P1^0;
sbit K2=P1^7;
void delay(uchar y)// 延时子程序
{
uchar x;
while(y--)for(x=110;x>0;x--);
}
display(x)// 显示子程序
{uintc,g=0x01;
number1[0]=x/1000;
number1[1]=x%1000/100;
number1[2]=x%1000%100/10;
number1[3]=x%1000%100%10;
for(c=0;c
{
P2=g;//位选
P0=table2[number1[c]];//段选
delay(15);//简短的延时
g=g
}}
void main()
{
IE=0x8a;
TMOD=0x51;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1)
{
if(K1==0)
{
delay(10);
if(K1==0)
{count=0;
TR0=TR1=1;
}
}
}
}
void t0()interrupt
1{ uchar K;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;// 开总中断和T0,T1// 设置中断工作方式//当按键按下时启动T0和T1//定时计数器T0子程序
if(++K==20)
{
TR1=TR0=K=0;
count=TH1*256+TL1;
display(count);
TH1=TL1=0;
}
}
//关两个中断//当到一秒后,计下T1收到的脉冲个数 //T1清零
八、实验心得
通过这次课程设计,我熟悉了Keil C51编程与PROTUSE的使用,对单片机的使用有了更深刻的了解,在焊接与测试过程中也懂得了对任何的细节必须分外注意,不能粗心大意。实验由两部分组成,仿真和焊板子,仿真过程用运用了keil c51软件和PROTUSE,这两个软件以前没有用过,通过这次课程设计,我学习了这两种软件的基本上使用,是此次课程设计比较大的收获。焊接过程中,由于从大一开始已经有好几次的焊接经历,我吸取以前的教训,在这次的焊接过程中在排版,接线上都有了很大的改善,而且焊点基本上没有虚焊,只不过焊接复位电路时没认真看仿真图,导致后面数码管没亮,但是我仔细检查后发现了错误所在,通过检查错误这一步,我对我自己做焊接试验有了很大的信心,因为我知道了如何用万用表检查错误。总之,课程设计不仅让我们温习了单片机的设计思路与编程语言,而且锻炼了我们实际动手能力,将理论与实践相结合了。