您的当前位置:首页正文

C语言实训报告

2023-12-08 来源:客趣旅游网


实训报告

班级:过化094 姓名:赵小红 学号:12

时间:2010年5月24~28号

地点:第二工业中心七楼C语言实训室 老师:邹益民

一、内容:1、红绿灯程序的设计和电路图的运行; 2、数字时钟的设计和电路图的运行。

二、硬件设计

(1) 数字时钟(实现六个数码管同时显示同一个数字)

硬件图

(分析:硬件部分有数码管,电阻、按键、电源、AT89C51芯片、电线;其中P1口用来控制数码管显示的数字,P2口用来控制是那几个数码管显示数字或不显,P0口接入按键,通过按键来控制数码管该显示哪个数字)

程序

#include

sbit KEY0=P0^0; //按键 0 sbit KEY1=P0^1; //按键 1 sbit KEY2=P0^2; //按键 2 sbit KEY3=P0^3; //按键 3 sbit KEY4=P0^4; //按键 4 main() {

P2=0x3F; P1=0x80; While(1) {

If(KEY0==0) P1=0xC0; else if(KEY1==0) P1=0XF9;

else if(KEY2==0); P1=0xA4; Else if(KEY3==0) P1=0XB0; else if(KEY4==0) P1=0x99; Else

P1=0x80; } }

理解:硬件部分有数码管,电阻、按键、电源、AT89C51芯片、电线;其中P1口用来控制数码管显示的数字,P2口用来控制是那几个数码管显示数字或不显,P0口接入按键,通过按键来控制数码管该显示哪个数字

在该程序中,再循环程序中,通过改变p1的值,按下相应的按键,就会实现数码管显示其他数字或字母,如9、F等;若改变主程序中P2的值,就会实现6个数码管中有的亮有的灭;如改变P1的值,就会改变在硬件启动后数码管的初值,如将P1=0X80改为P1=0XC0,在启动后,数码管的显示值将由6个8变为6个0。

(2)、数字时钟的设计和电路图的运行。

P0口:按键连接,

对P0口要有上拉电阻R;

上拉电阻R分析:若无上拉电阻,开关打开时为悬空,悬空时P0口电压不稳定。损耗;5V/10K=0.5mA,R越小损耗越大,若R过大拉不起P0口的电流。故R要选择合适。 P2口:接数码管;

P3口:二极管用拉电流的方式连接(原因:拉电流的能力强于灌电流)

即:将二极管正极和限流电阻接(500欧左右)在+5V,负极接P3口 红黄绿灯的具体接法:

将4个红灯的正极与500欧的电阻串联接在+5V电源上,负极接于P3^0上。 将4个黄灯的正极与500欧的电阻串联接在+5V电源上,负极接于P3^1上。 将4个绿灯的正极与500欧的电阻串联接在+5V电源上,负极接于P3^2上。 具体接法如下图:

红绿灯的电路图

三、软件设计 红绿灯的程序:

#include

void Toinit(); // 声明 void Display(void); void Key_Enter(void); void Delay(void);

char nhour=0, nminute=0, nsecond=0, ntimetick=0,ntime=0,nleftime=8; bit bRun=1;

sbit bRunKEY=P0^0; //按键 0 sbit bclearKEY=P0^1; //按键 1

sbit bhourKEY=P0^2; //按键 2 sbit bminuteKEY=P0^3; //按键 3 sbit bsecondKEY=P0^4; //按键 4 sbit RedLED=P3^0; //P3^0接4个红灯 sbit YellowLED=P3^1; // P3^1接4个黄灯 sbit GreenLED=P3^2; // P3^2接4个绿灯 main() {

P2=0; //关显示

Toinit();

RedLED=0; //红灯亮 YellowLED=1; //黄灯灭 GreenLED=1; //绿灯灭

while(1) {

Display(); Key_Enter(); } }

void Toinit() {

TCON=0; TMOD=0x01; TL0=-20000%256; TH0=-20000/256;

ET0=1;

EA=1; TR0=1; }

void Toint(void) interrupt 1 using 1 {

TL0=-20000%256; TH0=-20000/256; if(bRun==1) {

ntimetick++;

if(ntimetick>=50) {

ntimetick=0; ntime++;nleftime--;

if(ntime==8) {RedLED=1; YellowLED=0;

nleftime=3; }

if(ntime==11) {YellowLED=1;

GreenLED=0;

nleftime=6;} if(ntime==17)

{

// //总线

用定时计数器0 //方式1 //中断部分 //从第8秒开始 // 黄灯亮3秒 // 绿灯亮3秒

GreenLED=1;

YellowLED=0; nleftime=3; }

if(ntime==20)

{ ntime=0;

YellowLED=1;

RedLED=0; // 红灯亮8秒 nleftime=8;}

nsecond++; if( nsecond>=60) { nsecond=0; nminute++;

if(nminute>=60) {

nminute=0; nhour++;

if(nhour>=24) { nhour=0; } } } } } }

void Display(void) {

char DispTbL[]={0xC0,0xF9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; P2=0;

P1=DispTbL[nhour/10]; //小时的十位 P2=0x01;

Delay(); //延时

P2=0;

P1=DispTbL[nhour%10]; //小时的个位 P2=0x02;

Delay(); P2=0;

P1=DispTbL[nminute/10]; //分钟的十位 P2=0x04;

Delay(); P2=0;

P1=DispTbL[nminute%10]; //分钟的个位

P2=0x08;

Delay(); P2=0;

P1=DispTbL[nsecond/10]; //秒的十位 P2=0x10; Delay();

P2=0;

P1=DispTbL[nsecond%10]; //秒的个位 P2=0x20; Delay();

P2=0;

P1=DispTbL[nleftime/10]; P2=0x40; Delay();

P2=0;

P1=DispTbL[nleftime%10]; P2=0x80; Delay(); P2=0;

}

void Delay(void) {

int i;

for (i=0;i<200;i++) { } }

void Key_Enter() {

if(bRunKEY==0) {

Delay();

while(bRunKEY==0); Delay();

bRun=~bRun; }

if(bclearKEY==0) { Delay();

while(bclearKEY==0);

Delay();

nhour=0; nminute=0;

//延时 //清零

nsecond=0;

ntimetick=0;

ntime=0; nleftime=8;

RedLED=0; //红灯亮

YellowLED=1; //黄灯灭 GreenLED=1; //绿灯灭 }

if(bhourKEY==0) {

Delay();

while(bhourKEY==0); nhour++; if(nhour>=24) nhour=0; }

if(bminuteKEY==0) { Delay();

while(bminuteKEY==0); nminute++;

if(nminute>=60) nminute=0; }

if(bsecondKEY==0) {

Delay();

while(bsecondKEY==0); nsecond++; if(nsecond>=60) nsecond=0; }

}

对以上交通灯程序的理解: 1.数字时钟的功能

显示管显示:时、分、秒 P0口控制五个按键,

分别为:P0^0启动、P0^1清零、P0^2时、P0^3分、P0^4秒

2.红灯(8s)——黄灯(3s)——绿灯(6s)——黄灯(3s)——红灯 3.保留时间倒计时;

nlefttine ntime

T0init() 初始化

P1口:键选择; P2口:位选择

P3口:灯控位;P3^0控制红灯,P3^1控制红灯,P3^2控制红灯. 四、Proteus功能特点及基本使用步骤

PROTEUS ISIS 是电路分析与实物仿真软件。可以仿真、模拟各种器件和集成电路,该软件具有模拟电路仿真、单片机及其外围电路组成的系统的仿真,RS-232动态仿真、键盘和LCD系统仿真的功能;有各种虚拟器件,持主流单片机系统的仿真。支持第三方软件编译和调试环境,如keil c51,uvision2等软件。具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极具强大。 电路图绘制步骤:

(1) 将所需元件加入到对象选择器窗口 (2) 放置元器件至图形编辑窗口 (3) 放置总线至图形编辑窗口 (4) 元器件之间的连接 (5) 元器件与总线的链接

(6) 给与总线连接的导线贴标签

至此,便在PROTEUS ISIS中完成了整个电路图的绘制。 五、Keil功能特点及基本使用步骤

Keilc51是美国公司出品的51系列兼容单片机C语言软件开发系统,它提供了丰富的库函数和功能强大的集成开发调试工具。KEILC51的C编译工具在产生代码的准确性和效率方面达到了较高的水平。在C51工具包的整体结构中,其中uvision和ishell分别是c51 for windows\\ for dos的集成开发环境。开发人员可用IDE本身或其他编译器编辑C或汇编源文件,然后分别由C51编译器及A51编译器生成目标代码文件(.OBJ);目标文件可有LIB51生成库文件,也可以与库文件一起经L51连接定位生成绝对文件(.ABS);ABS文件可有OH51转换成标准的HEX文件,以供调试器进行源代码调试,也可供仿真器对目标板进行调试,或直接写入程序存贮器中。 在eil uvision下创建应用程序的步骤:

(1) 新建工程

(2) 添加程序文件 (3) 输入源程序 六、实训收获与心得

在为期一周的时间中,我的感受是:C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。在实训中,我对对C语言有了一个更深的了解认识,也对所学的知识得到巩固,还尝试运行编程,每次运行程序成功,让我对下面的项目就充满信心。通过自己与同学合作编写程序,最终把最初的理论知识转化基本技能。这次的实训,使我对C语言的学习产生浓厚的兴趣。

在实训时,每天大家来得很早,大家在一起学习,取长补短,我们很好的在实训中长知识,提高我们的学习热情。让我深切体会到了老师认真负责的伟大的精神和热情为同学指导的促学方式,虽然对有些时候老师没给我们指出解决问题的方法有些小抱怨,但是到了结束时才知道,这种教学让我们自己学会了自学,学会了去看懂别人的代码。还有那些我们应该注意的事项,这些是平时上课时无法学到的,是更深层次的巨大收获。

通过这次实训,也使我们发现了许多问题。在实训中,我们认识到自己还有很多的知

识没学好,基础知识没理清,而且许多东西还要去翻书,去上网搜索。而且遇到一些小错误运行不出来,就会烦躁不安,觉得有些自暴自弃或者抱怨项目的变态,以后要克服,尽量保持一颗良好的心态,学好C语言。 七、参考文献

(1) 微处理器应用; (2)Keil c语言教程 九、软硬件设计文件 1、Proteus文件 2、Kilec工程

因篇幅问题不能全部显示,请点此查看更多更全内容