第一范文网 - 专业文章范例文档资料分享平台

单片机第六份实验报告

来源:用户分享 时间:2025/7/10 14:11:48 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

南昌大学实验报告

学生姓名: 学 号: 专业班级: 通信152班 实验类型:□ 验证 □ 综合 □设计 □ 创新 实验日期: 实验成绩:

实验六 电子计算器仿真

一、实验目的

掌握计算器基础几类算法的仿真。

二、实验内容

1.10个数字键用作数值输入键,小数点的显示用重复按键的方式设置,即如果某数字键被重按,则该数字带小数点显示。

2.A、B、C、D、E、F六个键用作功能键:A表示求平方根;B表示求sin;C表示求自然对数lnx;D表示求以10为底的对数logx;E表示求一个数的指数函数exp(x);F表示求以a为底的指数函数。

3. 输入数字时,第一个输入的数显示在最左边第一个数码管,第二个输入的数显示在第二个数码管,依次类推。后边不输的位视为0,可显0也可熄灭。显示结果时,要求用满8个数码显示管

三、实验程序

主程序:

#include #include \#include \

#define MAIN_Fosc 11059200L //定义主时钟 typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32;

#define Timer0_Reload (65536UL -(MAIN_Fosc / 1000)) //Timer 0 中断频率,

//1000次/秒

#define DOT 0x20 #define DIS_BLACK 0x10 #define DIS_ 0x11

u8 code T_KeyTable[16] = {0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0}; u8 code t_display[]= //标准字库 {

// 0 1 2 3 4 5 6 7 8 9 A B C D E F

0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,

//black - H J K L N o P U t G Q r M y

0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,

0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46 }; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

u8 code T_COM[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码 sbit P_HC595_SER = P4^0; //pin 14 SER data input

sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock u8 LED8[8]; //显示缓冲 u8 display_index; //显示位索引 bit B_1ms; //1ms标志

u8 KeyCode; //给用户使用的键码,1-16有效 u8 cnt10ms;

u8 IO_KeyState, IO_KeyState1, IO_KeyHoldCnt; //行列键盘变量 u8 cnt50ms; u8 KS; u8 i,Key; u8 B_Key;

void IO_KeyScan(void); //50ms call u8 TmpH,TmpL,KeyCode; //定义变量

double a,b,c,d,e,f,g,x,y,x_f,x_i;

u8 k0,k1,k2,k3,k4,k5,k6,k7,k8,K_Down,count,B_Dot; u32 xa,y_i;

u8 led0,led1,led2,led3,led4,led5,led6,led7;

/********************** 延时函数************************/ void Delay(u8 ms) {

u16 i; do {

i = MAIN_Fosc / 13000; //14T per loop while(--i) { ; } }

while(--ms); }

/********************** 矩阵键盘************************/ u8 ScanKey(void)

{

P0=0xf0;

if(P0!=0xf0) //扫描列 {

Delay(10); //延时去抖 if(P0!=0xf0) //确定按键按下 {

// K_Down=1;

TmpH=P0; //读出P0口高四位数据 P0 =0x0F;

Delay(1); // TmpL=P0; // TmpH=TmpH+TmpL; // while(P0!=0x0F) {

; //松手检测 }

switch(TmpH&0xF0) {

case 0xE0: KeyCode=0; break; case 0xD0: KeyCode=4; break; case 0xB0: KeyCode=8; break; case 0x70:

KeyCode=12; break; }

switch(TmpL&0x0F) {

case 0x0E:

KeyCode+=0; break; case 0x0D:

KeyCode+=1; break; case 0x0B:

KeyCode+=2; break; case 0x07:

延时

读出P0口低四位数据

将取出的高四位,低四位组合,得到键值 KeyCode+=3; break; }

return KeyCode; //输出键值 } }

return 16; //无按键按下输出16 }

/*****************计算10的n次方***********************/ u32 pow10(u8 n) {

switch(n) {

case 0:

return 1; break; case 1:

return 10; break; case 2:

return 100; break; case 3:

return 1000; break; case 4:

return 10000; break; case 5:

return 100000; break; case 6:

return 1000000; break; case 7:

return 10000000; break; } }

/***************** 在数码管上显示一个8位数***********************/ print( u32 n) {

LED8[0]=n0000000/10000000; LED8[1]=n000000/1000000;

搜索更多关于: 单片机第六份实验报告 的文档
单片机第六份实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9of600jgvq6d7jn4l8uv58u602x74s012nl_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top