边做边学单片机c语言课后答案,HIFIDIY论坛-单片机边学边玩之-现学现做+小儿科+其它。仅供新手参考,不喜勿入! - Powered by Discuz!...

本帖最后由 ahao 于 2011-10-22 22:10 编辑

C程序如下红字部分。

#include                   //头文件

#include "STC_NEW_8051.H"     //STC自己的头文件

#define uint unsigned int           //宏定义

#define uchar unsigned char

uint abc,tongd0,tongd7;           //定义uint型变量

uchar tt0;                                  //定义uchar型变量

sbit gewei=P2^0;                     //个十百千位的位声明

sbit shiwei=P2^1;

sbit baiwei=P2^2;

sbit qianwei=P2^3;

sbit dian=P0^7;                      //小数点点声明

uchar code led[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //定义0-9数字的编码

void delay(uint z)                    //延时函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=100;y>0;y--);

}

void display()                         //显示函数

{

qianwei=0;                           //显示千位

P0=led[abc/1000];

dian=0;

delay(50);

qianwei=1;

baiwei=0;                             //显示百位

P0=led[abc%1000/100];

delay(50);

baiwei=1;

shiwei=0;                            //显示十位

P0=led[abc%100/10];

delay(50);

shiwei=1;

gewei=0;                            //显示个位

P0=led[abc%10];

delay(50);

gewei=1;

}

//以下直接引用自STC的网站数模转换的例子-------------------------------------

//以下选择 ADC 转换速率,只能选择其中一种

//SPEED1 SPEED0  A/D转换所需时间

#define AD_SPEED   0x60 //  0110,0000   1      1   70 个时钟周期转换一次,

//CPU工作频率21MHz时 A/D转换速度约 300KHz

//#define AD_SPEED   0x40 //0100,0000   1      0     140 个时钟周期转换一次

//#define AD_SPEED   0x20 //0010,0000   0      1     280 个时钟周期转换一次

//#define AD_SPEED   0x00 //0000,0000   0      0     420 个时钟周期转换一次

uint get_AD_result(uchar channel)                //模数转换程序

{

uchar AD_finished=0;                              //存储 A/D 转换标志

ADC_RES = 0;

ADC_RESL = 0;

channel &= 0x07;                                    //0000,0111 清0高5位

ADC_CONTR = AD_SPEED;

_nop_();

ADC_CONTR |= channel;                          //选择 A/D 当前通道

_nop_();

ADC_CONTR |= 0x80;                             //启动 A/D 电源

delay(1);                                                //使输入电压达到稳定

ADC_CONTR |= 0x08;                             //0000,1000 令 ADCS = 1, 启动A/D转换,

AD_finished = 0;

while (AD_finished ==0 )                          //等待A/D转换结束

{

AD_finished = (ADC_CONTR & 0x10);    //0001,0000 测试A/D转换结束否

}

ADC_CONTR &= 0xE7;                             //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,

return (ADC_RES*4+ADC_RESL);             //返回 A/D 高8位+低2位转换结果

}

//------下面是主函数--------

void main()                                //主程序

{                                              //进入主程序后先对定时器初始化

TMOD=0x01;                       //设定定时器0工作方式

TH0=(65536-10000)/256;    //定时器0高8位装初值  12M晶振定时10毫秒

TL0=(65536-10000)%256;   //定时器0低8位装初值

ET0=1;                               //开定时器0中断

TR0=1;                               //启动定时器0

EA=1;                                 //开总中断

P1ASF = 0x81;                    //1000,0001, 将 P1.0 P1.7 置成模拟口

//    ADRJ = AUXR1^2:

//    0: 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器

//    1: 10 位A/D 转换结果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器

AUXR1 &= ~0x04;               //0000,0100, 令 ADRJ=0

//    AUXR1 |= 0x04;                  //0000,0100, 令 ADRJ=1

ADC_CONTR |= 0x80;          //1000,0000 打开 A/D 转换电源

while(1)

{

abc=(tongd0*1.0/tongd7)*2500;    //让abc等于通道0和通道7转换后的运算结果

display();                                       //显示具体数字

}

}

void timer0() interrupt 1                        //定时器0服务程序

{

TH0=(65536-10000)/256;               //再装一次初值

TL0=(65536-10000)%256;

tt0++;

if(tt0==20)                                    //200ms转换一次

{

tt0=0;

tongd0=get_AD_result(0);         //转换P0.0通道

tongd7=get_AD_result(7);         //转换P0.7通道

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值