
文章插图
文章插图
仿真结果:将Keil生成的 。hex文件添加到AT80C51中后,运行仿真电路如图所示,会显示出00到99s的秒表功能,系统可以正常工作 。
五、心得体会
通过这次课程设计,认识到自己有很多不足之处,需要根据课程的设计要求找到合适的方案,设计好程序流程图,以此来写出相应的程序,还地添加一些额外程序来试系统变得更加稳定,程序应该由各种子程序组成,并加上注释,这样程序出错时或者仿真运行显示不出正确的结果时,可以更加方便的找到出错的地方 。这次的秒表设计,仿真硬件电路不是很麻烦,主要都是需要写出适合的正确的程序来进行驱动,通过这次的课程设计,更加系统的锻炼了自己 。
单片机源程序:
#include
typedef unsigned char uint8;
typedef unsigned intuint16;
/*七段共阴管显示定义*/
uint8 code dispcode[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
/*定义并初始化变量*/
uint8 seconde=0;// second 调整定义
uint16mstcnt=0;//minite调整定义
sbit key1=P1^6;//定义P1.6端口为按键1
sbit key2=P1^7;//定义p1.7端口为按键2
/*函数声明*/
void delay(uint8 k ); //延时子程序
void time_pro( ); //时间处理子程序
void display( ); //显示子程序
void keyscan( ); //键盘扫描子程序
/*延时子程序*/
void delay (uint8 k)
{
uint8 j;
while((k–)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
/*时间处理子程序*/
void time_pro(void)
{
if(seconde==99)//秒钟设为99进制
{
seconde=0;
}
}
/* 显示子程序*/
void display(void)
{
P0=dispcode[seconde/10]; //显示秒的十位
delay(4);
P3=dispcode[seconde%10]; //显示秒的个位
delay(4);
}
/*键盘扫描子程序*/
void keyscan (void)
{
if(key1==0) //按键1为开始键
{
delay(60);
if(key1==0)
EA=1;
delay(60);
seconde++;
}
if(seconde==99)
{seconde=0;
}
if(key2==0) //按键2为复位键
{
delay(60);
if(key2==0)
{
delay(60);
seconde=0;
delay(60);
EA=0;
}
}
}
/*1s定时子程序 */
void timer0(void) interrupt 1 using 0
{
TH0=0xff;
TL0=0x19;
TMOD = 0x01;//定时器0方式1,250us中断一次
mstcnt++;
if(mstcnt==4000)
{
seconde++;
mstcnt=0; //对计数单元的清零
}
}
/*主函数*/
void main(void)
{
P0=0xff; //初始化p0口,全设为1使数码管
TMOD = 0x01; //time0为定时器,方式1
TH0=0xff; //预置计数初值
TL0=0x19;
EA=0;
ET0=1;
TR0=1;
while (1)
{
keyscan( ); //按键扫描
time_pro( ); //时间处理
display( ); //显示时间
}
【00到99秒表的课程设计方法 单片机秒表课程设计】}
经验总结扩展阅读
- IPv4与IPv6之间的区别是什么
- 做女人的三个底线,越早知道越好!
- 陶虹把女儿逼得跳海、那些离婚的女人都怎样了?
- 我,普通姑娘,做不到讨所有人喜欢
- 如何读懂孩子的潜意识
- 一只狗狗的训练引发的带娃灵感
- 父母的“刀子嘴豆腐心”,正在深深伤害孩子
- 女性真的是「30如狼40如虎」吗?
- 再看少年的你,其实是一个越狱的故事
- 二婚男人能不能嫁、女性对待二婚男的心理感受