- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机C语言程序设计实训100例 基于8051 PROTEUS仿真1
单片机C语言程序设计实训100例 基于8051 PROTEUS仿真1
32
/*10s的秒表“按键部分有问题”名称:10s的秒表
说明:首次按键计时开始,再次按键暂停,第三次按键清零。*/
#includelt;reg51.hgt;
#defineucharunsignedchar
#defineuintunsignedint
sbitK1=P3^7;
uchar
i,Second_Counts,Key_Flag_Idx;
bitKey_State;
uchar
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延时
voidDelayMS(uintms)
{
uchart;
while(ms--)for(t=0;tlt;120;t++);
}
//处理按键事件
voidKey_Event_Handle()
{
if(Key_State==0)
{
Key_Flag_Idx=(Key_Flag_Idx+1)%3;
switch(Key_Flag_Idx)
{
case1:EA=1;ET0=1;TR0=1;break;
case2:EA=0;ET0=0;TR0=0;break;
case0:P0=0x3f;P2=0x3f;i=0;Second_Counts=0;
}
}
}
//主程序
voidmain()
{
P0=0x3f;//显示00
P2=0x3f;
i=0;
Second_Counts=0;
Key_Flag_Idx=0;//按键次数(取值0,1,2,3)Key_State=1;//按键状态
1
TMOD=0x01;//定时器0方式1
TH0=(65536-50000)/256;//定时器0:15ms
TL0=(65536-50000)%256;
while(1)
{
if(Key_State!=K1)
{
DelayMS(10);
Key_State=K1;
Key_Event_Handle();
}
}
}
//T0中断函数
voidDSY_Refresh()interrupt1
{
TH0=(65536-50000)/256;//恢复定时器0初值
TL0=(65536-50000)%256;
if(++i==2)//50ms*2=0.1s转换状态
{
i=0;
Second_Counts++;
P0=DSY_CODE[Second_Counts/10];
P2=DSY_CODE[Second_Counts%10];
if(Second_Counts==100)Second_Counts=0;//满100(10s)后显示00}
}
33
/*用计数器中断实现100以内的按键计数名称:用计数器中断实现100以内的按键计数
说明:本例用T0计数器中断实现按键技术,由于计数寄存器初值为1,因此
P3.4引脚的每次负跳变都会触发T0中断,实现计数值累加。
计数器的清零用外部中断0控制。
*/
#includelt;reg51.hgt;
#defineucharunsignedchar
#defineuintunsignedint
//段码
ucharcode
2
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};ucharCount=0;
//主程序
voidmain()
{
P0=0x00;
P2=0x00;
TMOD=0x06;//计数器T0方式2
TH0=TL0=256-1;//计数值为1
ET0=1;//允许T0中断
EX0=1;//允许INT0中断
EA=1;//允许CPU中断
IP=0x02;//设置优先级,T0高于INT0
IT0=1;//INT0中断触发方式为下降沿触发
TR0=1;//启动T0
while(1)
您可能关注的文档
最近下载
- 《爆炸和火灾危险场所防雷装置检测技术规范GB/T 32937-2016》知识培训.pptx VIP
- 3.1 波的形成 课件-高二上学期物理人教版(2019)选择性必修第一册.pptx VIP
- 《应用密码学》配套教学课件.ppt VIP
- 演讲台风训练.ppt VIP
- 演讲比赛培训方案.pptx VIP
- 演讲台风适用于演讲训练培训.ppt VIP
- 运输企业安全教育培训制度.docx VIP
- JC-T 2027-2010 高纯石英中杂质含量的测定方法—电感耦合等离子体原子发射光谱法.pdf VIP
- 注册安全工程师考试《管理笔记》.docx VIP
- 宁夏平罗县几种典型土壤修正系数的确定.pdf VIP
文档评论(0)