- 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言版数码管动态显示实验报告
数码管动态显示实验
一、实验要求
在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路
在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码管数据引脚相连 ,P2.0~P2.3引脚输出选控制信号
在Keil软件中编写程序,采用动态显示法,实现数码管显示变量unsigned int show_value的值(show_value的值范围为0000~9999),即把show_value的千百十个位的值用数码管显示出来。
二、实验目的
巩固Proteus软件和Keil软件的使用方法
学习端口输入输出的高级应用
掌握7段数码管的连接方式和动态显示法
掌握查表程序和延时等子程序的设计
三.实验说明
(条理清晰,含程序的一些功能分析计算)
如下图(五)所示,由P1口将要显示的数字输给七段数码管;再由P2第四位输给数码管的公共端,作为扫描输入信号;用外部中断P3.2和P3.3分别接PB1与PB2,实现数字的增减。所要实现的功能是,开始运行电路功能图时,四个数码管分别显示0000,按下PB1增1,直到9999回到0000,相反按下PB2减1,直到0000回到9999。
在算相关数据时,由于要显示个十百千的不同数字,要调用disp函数,
disp[0]=show/1000; //显示千位的值 disp[1]=show%1000/100; //显示百位的值
disp[2]=show%100/10; //显示十位的值 disp[3]=show%10; //显示个位的值
本实验需要用到IE寄存器与TCON寄存器。
四、硬件原理图及程序设计
(一)硬件原理图设计
图(五)
开始运行proteus,四个数码管显示0000,按下PB1数码管增1,按下PB2数码管减1。
(二)程序流程图设计
三)程序设源代码
#includereg51.h //定义8051寄存器头文件
#define SEG7P P1 // 定义数码管输入信号接P1
#define SCANP P2 //定义数码管扫描信号接P2
char code TAB[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0~4
0x92, 0x83, 0xf8, 0x80, 0x98 };//数字5~~9
char disp[4]={0,0,0,0}; //显示数组
void delay_ms(int x); //声明延迟函数
char scan[4]={0xfe,0xfd,0xfb,0xf7}; //声明输入扫描信号
char i,j; //声明变量
void display(); //显示数组diso的内容
int show=0000; //定义初始值
void get_disp(); //声明返回diap
main() //主程序开始
{
IE=0X85; //开IE寄存器,允许INT0和INT1中断
TCON=0X05; //开INT0,INT1
while(1) //无穷循环
{
get_disp();
display();
}
}
void delay_ms(int x) //声明延迟函数
{ int i,j; //定义变量
for (i=0;ix;i++) //开始计数,计数x次
for (j=0;j120;j++); //计数120次,延迟1ms
}
void display() //声明显示函数
{
for(i=0;i4;i++) //开始计数 ,计数4次
{ j=disp[3-i]; //diap的值附到变量j
SCANP=scan[i]; //显示扫描 信号
SEG7P=TAB[j]; //显示数字到数码管
delay_ms(4); //延迟4ms
}
}
void INT0_IS
您可能关注的文档
最近下载
- 除颤仪迈瑞D3说明书 .pdf VIP
- 电梯结构及原理 第9章 自动扶梯、自动人行道.ppt VIP
- 通信基础知识课件.ppt VIP
- 人教版数学七年级上册开学第一课课件.pptx VIP
- 亲子关系量表-pianta编制-张晓,陈会昌修订.docx VIP
- 贵州省丹寨汞矿四相厂历史遗留汞渣污染综合治理工程环评报告.docx VIP
- 八师兵团职工考试题库及答案.doc
- (正式版)B 6222-2005 工业企业煤气安全规程.docx VIP
- Panasonic松下滚筒式热泵干衣机NH-LH1023D NH-VH1025P NH-LHJ02YD NH-VH10B5P NH-LH10B3D NH-VH102FP NH-LHM02Y2 用户手册.pdf
- 孕妇学校健康教育宣教.pptx VIP
文档评论(0)