《嵌入式S3C2410计算器小程序ARM9》由会员分享,可在线阅读,更多相关《嵌入式S3C2410计算器小程序ARM9(23页珍藏版)》请在金锄头文库上搜索。
1、基于S3C2410 ARM9 的 计算器小程序,下面是源代码。以及7279 接口和相应的驱动程序。#include 2410addr.h/加载地址一些最基本的地址#include#include 7279.h/7279 控制数码管和键盘的int counter=0,operation=0,edge=0;/counter是用来计算你输入的次数的你琽peration 用来判断是否有int key_number1=0,key_number2=0,key_number3=0,key_number=0,math=0,out_bit6,yes_key=0;int allnumber20;void resu
2、lt()int n=counter-1;int i=0;key_number1=0;key_number2=0;key_number3=0;for(i=0;iedge-1;i+)key_number1=(key_number1*10+allnumberi);for(i=edge;i=n;i+)key_number2=(key_number2*10+allnumberi);i=edge-1;switch(allnumberi)case 10:key_number3=key_number1+key_number2;break;case 11:key_number3=key_number1-key_
3、number2;break;case 12:key_number3=key_number1*key_number2;break;case 13:key_number3=key_number1/key_number2;break;for(i=0;i6;i+)out_biti=key_number3%0 x0a;key_number3=key_number3/0 x0a;write7279(DECODE1+i,out_biti);void _irq Keyaddnumb(void)yes_key=1;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 23 页 -rINTMSK|=(BI
4、T_EINT2);/key_number=read7279(CMD_READ);key_number=read7279(CMD_READ);ClearPending(BIT_EINT2);/清除中断标志rINTMSK&=(BIT_EINT2);/yes_key=0;void Main()int j=0;Init7279();/EINT2 Rise rGPFCON=(rGPFCON&0 xff0f)|0 x0060;/GPF2:Interrupt;GPF3:Out 7279CS/extern int p=0;/for(p=0;p20;p+)allnumberp=0;send_byte(CMD_R
5、ESET);write7279(0 x98,0 xff);rEXTINT0=(rEXTINT0&0 xffff00FF)|0 x00000400;pISR_EINT2=(unsigned)Keyaddnumb;rINTMOD=0 x0;/设置为 IRQ 模式rINTMSK&=(BIT_EINT2);/打开 keyboard 中断do if(yes_key=1)switch(key_number)case 0 x03:key_number=0;operation=0;break;case 0 x0b:key_number=1;operation=0;break;case 0 x13:key_nu
6、mber=2;operation=0;break;case 0 x1b:key_number=3;operation=0;break;case 0 x04:key_number=4;operation=0;break;case 0 x0c:key_number=5;operation=0;break;case 0 x14:key_number=6;operation=0;break;case 0 x1c:key_number=7;operation=0;break;case 0 x05:key_number=8;operation=0;break;case 0 x0d:key_number=9
7、;operation=0;break;case 0 x15:key_number=10;operation=1;break;case 0 x1d:key_number=11;operation=2;break;case 0 x06:key_number=12;operation=3;break;case 0 x0e:key_number=13;operation=4;break;case 0 x16:key_number=14;operation=5;break;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 23 页 -case 0 x1e:key_number=15;oper
8、ation=6;break;if(key_number=14)result();for(j=0;j19;j+)allnumberj=0;counter=0;edge=0;else if(key_number=15)/while(1)/for(j=0;j1000000;j+)short_delay();send_byte(CMD_RESET);/*Init7279();/EINT2 Rise rGPFCON=(rGPFCON&0 xff0f)|0 x0060;/GPF2:Interrupt;GPF3:Out 7279CS rEXTINT0=(rEXTINT0&0 xffff00FF)|0 x00
9、000400;pISR_EINT2=(unsigned)Keyaddnumb;rINTMOD=0 x0;/设置为 IRQ 模式rINTMSK&=(BIT_EINT2);/打开 keyboard 中断/result();*/break;/else allnumbercounter+=key_number;yes_key=0;if(yes_key=0&operation=0)int j=0,p;if(edge0)/if(edge1)for(j=1;j1&counter0)send_byte(CMD_RESET);write7279(0 x98,0 xff);for(j=1;j=counter-ed
10、ge;j+)write7279(DECODE0+5+1-j,allnumberedge+j-1);/else send_byte(CMD_RESET);else if(0operation5)edge=counter;operation=0;while(1);#include 2410addr.h#include 7279.h void Init7279(void)rGPEUP=rGPEUP|0 x3800;/使用 GPE11 GPE12 GPE13,去掉对应上拉功能rGPECON=(rGPECON&0 xf03fffff)|0 x05000000;/GPE11:In Data;GPE12:O
11、ut Data;GPE13:Out CLK rGPFUP=rGPFUP|0 x0c;/使用 GPF2 GPF3/rGPFCON=(rGPFCON&0 xff0f)|0 x0040;/GPF2:In Key;GPF3:Out 7279CS rGPFCON=(rGPFCON&0 xff0f)|0 x0060;/GPF2:In Key;GPF3:Out 7279CS rGPFDAT=rGPFDA T|0 x08;/GPF3=1 rGPFDAT=rGPFDA T&0 xf7;/GPF3=0 选通 7279 rGPGUP=rGPGUP|0 x0040;/使用 GPG6,去掉对应上拉功能rGPGCON=(
12、rGPGCON&0 xffffcfff)|0 x01000;/GPG6:Out 74H125 C1&(C2)rGPGDAT=rGPGDAT&0 xffbf;/GPG6=0 void write7279(unsigned char cmd,unsigned char dta)send_byte(cmd);send_byte(dta);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 23 页 -unsigned char read7279(unsigned char command)send_byte(command);return(receive_byte();void send_
13、byte(unsigned char out_byte)unsigned char i;setcsLOW;long_delay();for(i=0;i8;i+)if(out_byte&0 x80)setdatHIGH;else setdatLOW;setclkHIGH;short_delay();setclkLOW;short_delay();out_byte=out_byte*2;setdatLOW;unsigned char receive_byte(void)unsigned char i,in_byte;setdatZ;short_delay();for(i=0;i8;i+)setcl
14、kHIGH;short_delay();in_byte=in_byte*2;if(dat)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 23 页 -in_byte=in_byte|0 x01;setclkLOW;short_delay();setdatL;return(in_byte);void long_delay(void)unsigned char i;for(i=0;i0 x30;i+);void short_delay(void)unsigned char i;for(i=0;i0 x0a;i+);void delay10ms(unsigned char time)u
15、nsigned char i;unsigned int j;for(i=0;itime;i+)for(j=0;j11/GPE11#define key(rGPFDA T&0 x04)2/GPF2#define cs(rGPFDA T&0 x08)3/GPF3#endif/*_7279_H_*/=/File Name:2410addr.h/Function:S3C2410 Define Address Register/Program:Shin,On Pil(SOP)/Date:May 06,2002/Version:0.0/History/0.0:Programming start(Febru
16、ary 15,2002)-SOP/INTERRUPT rPRIORITY 0 x4a00000a-0 x4a00000c(May 02,2002 SOP)/RTC BCD DAY and DA TE Register Name Correction(May 06,2002 SOP)/=名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 23 页 -#ifndef _2410ADDR_H_#define _2410ADDR_H_#ifdef _cplusplus extern C#endif#define FCLK 200000000#define HCLK(200000000/2)#define PCLK(200000000/4)#define UCLK PCLK/#define FCLK 202800000/#define HCLK(202800000/2)/#define PCLK(202800000/4)/#define UCLK PCLK/BUSWIDTH:16,32#define BUSWIDTH(32)/64MB/0 x30000000 0 x30ffffff:D