F360最小系统测试程序.docx_第1页
F360最小系统测试程序.docx_第2页
F360最小系统测试程序.docx_第3页
F360最小系统测试程序.docx_第4页
F360最小系统测试程序.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/* 功能:F360最小系统测试程序12864开机时显示键盘显示测试程序和正弦波形;每按一个按键,LCD上显示相应字符;P2.0P2.7显示不同频率的方波;IDA0产生锯齿波。*/#include #define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define CS1 0x4000 /外部扩展片选地址1#define CS2 0x8000 /外部扩展片选地址2#define LEDENCS 0xC004 /LCD模块背光控制片选信号#define WCOMADDR 0xC008 /写命令寄存器的地址#define WDATADDR 0xC009 /写数据寄存器的地址#define RCOMADDR 0xC00A /读命令寄存器的地址#define RDATADDR 0xC00B /读数据寄存器的地址#define KEYCS 0xC00C /读键盘的地址uchar count1;/软件计数器uchar keycode;/存放键值uchar LEDCON=0x00;/LCD模块背光控制字,最低位为0时关LED背光,最低位为1时开启LED背光,uchar idata WaveData128; /波形数据缓冲区 bit keysign=0; /键标志,0:无键输入,1:有键输入sbit START=P30;sbit SW0=P31;sbit SW1=P33;uchar code hanzi10 = 键盘显示测试程序;uchar code hanzik0 = K0;uchar code hanzik1 = K1;uchar code hanzik2 = K2;uchar code hanzik3 = K3;uchar code hanzik4 = K4;uchar code hanzik5 = K5;uchar code hanzik6 = K6;uchar code hanzik7 = K7;uchar code hanzik8 = K8;uchar code hanzik9 = K9;uchar code hanzika = KA;uchar code hanzikb = KB;uchar code hanzikc = KC;uchar code hanzikd = KD;uchar code hanzike = KE;uchar code hanzikf = KF;uchar code sindata128= 0x80,0x86,0x8c,0x92,0x98,0x9f,0xa5,0xab,0xb0,0xb6,0xbc,0xc1,0xc7,0xcc,0xd1,0xd5, 0xda,0xde,0xe2,0xe6,0xea,0xed,0xf0,0xf3,0xf6,0xf8,0xfa,0xfc,0xfd,0xfe,0xff,0xff, 0xff,0xff,0xff,0xfe,0xfd,0xfc,0xfa,0xf8,0xf6,0xf3,0xf0,0xed,0xea,0xe6,0xe2,0xde, 0xda,0xd5,0xd1,0xcc,0xc7,0xc1,0xbc,0xb6,0xb0,0xab,0xa5,0x9f,0x98,0x92,0x8c,0x86, 0x7f,0x79,0x73,0x6d,0x67,0x60,0x5a,0x54,0x4f,0x49,0x43,0x3e,0x38,0x33,0x2e,0x2a, 0x25,0x21,0x1d,0x19,0x15,0x12,0x0f,0x0c,0x09,0x07,0x05,0x03,0x02,0x01,0x00,0x00, 0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x07,0x09,0x0c,0x0f,0x12,0x15,0x19,0x1d,0x21, 0x25,0x2a,0x2e,0x33,0x38,0x3e,0x43,0x49,0x4f,0x54,0x5a,0x60,0x67,0x6d,0x73,0x79, ;/-/ Function PROTOTYPES/-void OscInit(void);void PortIoInit(void);void XramInit(void);void SmbInit(void);/I2C总线初始化void UartInit(void);/异步串口通信接口初始化void DacInit(void);/D/A转化器初始化void AdcInit(void);/A/D初始化void Int0Init(void);/外部中断初始化void TimerInit(void);/定时器初始化void PcaInit(void);/PCA初始化void InterruptsInit(void);/中断系统初始化void InitDevice(void);void CheckLcd();/检查LCD是否空闲子程序void WriteCom(uchar n);/Lcd写指令子程序void WriteData(uchar m);/Lcd写数据子程序void InsitiLcd();/Lcd初始化子程序void DispHan( uchar code *a,uchar m,uchar k);/显示汉字子程序void WaveData_Init() ;/写128字节波形数据子程序void ShowWave();/波形显示子程序/* 主函数/*/void main() uchar xdata *addr;InitDevice();/F360初始化 InsitiLcd();/LCD模块初始化 DispHan(hanzi10,0x80,0x10);/显示“键盘显示测试程序”WriteCom(0x34); /关绘图显示,设为扩充指令WaveData_Init(); /将128字节的正弦波数据读入显示RAM ShowWave(); /显示波形WriteCom(0x36);/开绘图显示WriteCom(0x30);/设为基本指令集while (1) if (keysign = 1)keysign = 0;switch(keycode)case 0x00: /k0键 InsitiLcd();/LCD模块初始化 DispHan(hanzik0,0x84,0x02);/显示“K0”addr=LEDENCS;LEDCON=LEDCON;*addr=LEDCON;/开/关LCD模块背光break; case 0x01: /k1键 InsitiLcd(); DispHan(hanzik1,0x85,0x02);/显示“K1”SW0=0;SW1=0;break; case 0x02: /k2键 InsitiLcd(); DispHan(hanzik2,0x86,0x02);/显示“K2”SW0=1;SW1=0;break; case 0x03: /k3键 InsitiLcd(); DispHan(hanzik3,0x87,0x02);/显示“K3”SW0=0;SW1=1;break; case 0x04: /k4键 InsitiLcd(); DispHan(hanzik4,0x94,0x02);/显示“K4”SW0=1;SW1=1;break; case 0x05: /k5键 InsitiLcd(); DispHan(hanzik5,0x95,0x02);/显示“K5”break; case 0x06: /k6键 InsitiLcd(); DispHan(hanzik6,0x96,0x02);/显示“K6”break; case 0x07: /k7键 InsitiLcd(); DispHan(hanzik7,0x97,0x02);/显示“K7”break; case 0x08: /k8键 InsitiLcd(); DispHan(hanzik8,0x8C,0x02);/显示“K8”break; case 0x09: /k9键 InsitiLcd(); DispHan(hanzik9,0x8D,0x02);/显示“K9”break; case 0x0A: /ka键 InsitiLcd(); DispHan(hanzika,0x8E,0x02);/显示“KA”break; case 0x0B: /kb键 InsitiLcd(); DispHan(hanzikb,0x8F,0x02);/显示“KB”break; case 0x0C: /kc键 InsitiLcd(); DispHan(hanzikc,0x9C,0x02);/显示“KC”break; case 0x0D: /kd键 InsitiLcd(); DispHan(hanzikd,0x9D,0x02);/显示“KD”break;case 0x0E: /ke键 InsitiLcd(); DispHan(hanzike,0x9E,0x02);/显示“KE”break; case 0x0F: /kf键 InsitiLcd(); DispHan(hanzikf,0x9F,0x02);/显示“KF”break; /* 外部中断0功能:读入键值*/void ReadKey() interrupt 0 uchar xdata *addr;addr=KEYCS;keycode=*addr;keycode &= 0x0F; /屏蔽无效的高四位keysign =1; /置按键标志位 /* 定时器0中断功能:定时10ms,P2口产生方波*/void Timer0() interrupt 1 TL0=0xf0;TH0=0xd8; /重置时间常数10msP2+; /* 定时器1中断功能:定时10ms,IDA0产生锯齿波*/void Timer1() interrupt 3 uchar count;TL1=0x0c;/定时0.5msTH1=0xfe;count+;IDA0H=count; /*内部资源初始化子程序*函数功能:各种内部资源初始化*/void OscInit(void)/内部振荡器初始化SFRPAGE=0x0f;/选择特殊功能寄存器页地址OSCICL=OSCICL+4;OSCICN=0xc2;/允许内部振荡器,频率除2作为SYSCLK=12MHzCLKSEL=0x00;/选择内部振荡器SFRPAGE=0x00;void PortIoInit(void)/I/O口初始化 SFRPAGE=0x0f;P0MDIN=0xe7;/P0.3、P0.4模拟量输入P0MDOUT=0x83;/P0.0、P0.1、P0.7推拉式输出P0SKIP=0xf9;/P0.1、P0.2被交叉开关跳过P1MDIN=0xff;/P1设置为数字量输入P1MDOUT=0xff;/P1设置为推拉式输出P1SKIP=0xff;/P1被交叉开关跳过P2MDIN=0xff;/P2设置为数字量输入P2MDOUT=0xff;/P2设置为推拉式输出P2SKIP=0xff;P3MDIN=0xff;/P3设置为数字量输入P3MDOUT=0xff;/P3设置为推拉式输出P3SKIP=0xff;P4MDOUT=0xff;/P4.5设为OC输出,其余推拉式输出XBR0=0x01;/使能UARTXBR1=0xC0;/禁止弱上拉,交叉开关允许SFRPAGE=0x00;return;void XramInit(void)/外部数据储存器初始化SFRPAGE=0x0f;EMI0CF=0x07;/引脚复用方式SFRPAGE=0x00;return;void SmbInit(void)/I2C总线初始化SMB0CF=0xc1;/定时器T1溢出作为时钟return;void UartInit(void)/异步串口通信接口初始化SCON0=0x00;/10位UARTreturn;void DacInit(void)/D/A转化器初始化IDA0CN=0xf2;/IDA0使能,写IDA0H触发DAC输出更新,2mA满度输出return;void AdcInit(void)/A/D初始化REF0CN=0x08;/选择VDD作为电压基准AMX0P=0x08;/正端接P0AMX0N=0x1f;/负端接地ADC0CF=0x2c;/左对齐,转换时钟2MHzADC0CN=0x80;return;void Int0Init(void)/外部中断初始化IT01CF=0x05;/选择P0.5为INT0IT0=1;/INT0下降沿触发return;void TimerInit(void)/定时器初始化TMOD=0x11;/T0、T1方式1CKCON=0x00;/系统时钟12分频TL0=0x78;/定时10msTH0=0xec;TL1=0x0c;/定时0.5msTH1=0xfe;TMR2CN=0x04;/16位自动重装TMR2RLL=0xf0;/定时10msTMR2RLH=0xd8;TMR3CN=0x0c;/双8位自动重装载,系统时钟1/12TMR3RLL=0xe0;/定时100usTMR3RLH=0xff;TR0=1;TR1=1;return;void PcaInit(void)/PCA初始化PCA0CN=0x40;/允许PCA计数器/定时器PCA0MD=0x00;/禁止看门狗定时器return;void InterruptsInit(void)/中断系统初始化IE0=0;/清INT0中断标志EX0=1;PX0=0;ET0=1;ET1=1;/ET2=1;/EIE1=0x08;/允许ADC中断/ES0=1;EA=1;return;void InitDevice(void)OscInit();PortIoInit();XramInit();/SmbInit();/UartInit();DacInit();/AdcInit();Int0Init();TimerInit();PcaInit();InterruptsInit();return;/* Function: 检查LCD是否空闲子程序*/void CheckLcd() uchar temp = 0x00; uchar xdata *addr; while (1) addr=RCOMADDR;temp=*addr;temp &= 0x80; if(temp = 0x00)break; /* Function: Lcd写指令子程序*/void WriteCom(uchar n) uchar xdata *addr;CheckLcd();addr=WCOMADDR;*addr=n; /* Function: Lcd写数据子程序*/void WriteData(uchar m) uchar xdata *addr;CheckLcd();addr=WDATADDR;*addr = m; /* Function: Lcd初始化子程序*/void InsitiLcd() WriteCom(0x30); /设为基本指令集WriteCom(0x01); /清屏 WriteCom(0x0c); /开整体显示 /*汉字显示子程序*函数功能:在指定位置显示指定长度的字符串入口参数:*a是字符串 m表示显示的起始地址,k表示字符串长度*/void DispHan( uchar code *a,uchar m,uchar k) uchar dat, i, j, length; length = k/2; WriteCom(m); for (i=0;i length;i+) j = 2*i;dat = aj;/提取国标码第一字节WriteData(dat);dat =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论