欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

    伟福8051单机实例程式.docx

    • 资源ID:12231935       资源大小:55.24KB        全文页数:22页
    • 资源格式: DOCX        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    伟福8051单机实例程式.docx

    附录 CC 语言程序清单 LAP2000;软件实验一 存储器块清零/* #define Buffer 0x3000 */ unsigned char Buffer256;void main() unsigned int index;unsigned char * ptr;ptr = &Buffer; /* 起始地址 */for (index = 0; index <= 255; index+) *ptr+ = 0xff; /* 清 0, 地址加一 */ ;软件实验二 二进制到 BCD 码转换/* 将 Number 拆为三个 void main()unsigned char Result3;unsigned char Number;Number = 234;Result0 = Number / 100;Result1 = (Number % 100) / 10; /*Result2 = Number % 10;/*;软件实验三 二进制到 ASCII 码转换 /* 将 A 拆为二个 ASCII 码 ,BCD 码, 并存入Result 数组 */除以 100, 得百位数 */ 余数除以 10, 得十位数 */ 余数为个位数 */并存入 Result 数组 */unsigned char const ASCIITable16 = "0123456789ABCDEF" /* 定义数字对应的 ASCII 表 */ void main()unsigned char Result2; unsigned char Number;Number = 0x1a;Result0 = ASCIITableNumber / 16; /*Result1 = ASCIITableNumber & 0xf; /*高四位 */ 低四位 */while(1);软件实验四 内存块移动unsigned char Buffer1256;unsigned char Buffer2256;void main()unsigned char * ptr1; unsigned char * ptr2;unsigned int index;ptr1 = &Buffer10;ptr2 = &Buffer20;for (index=0; index <= 255; index+) *ptr2+ = *ptr1+ - 1;软件实验五 程序跳转表 void Func0() void Func1() void Func2() void Func3() void FuncEnter(unsigned char FuncID) switch (FuncID) case 0: Func0(); break;case 1:Func1(); break;case 2:Func2(); break;case 3:Func3(); break;default: break;void main()FuncEnter(0);FuncEnter(1);FuncEnter(2);FuncEnter(3); ;软件实验六 数据排序#define Size 10unsigned char ArraySize= 5,2,1,0,2,3,8,6,5,9;void main ()unsigned char Change;unsigned char index;unsigned char Temp;do Change = 0;for (index = 0; index < (Size-1); index+) if (Arrayindex > Arrayindex+1) Change = 1;Temp = Arrayindex;Arrayindex = Arrayindex+1; Arrayindex+1 = Temp; while (Change);while (1);硬件实验一 用 74LS245 读入外部数据 extern unsigned char IN(unsigned int port);extern void OUT(unsigned int port, unsigned char v);#define CS245 0x8000 unsigned char b;void main()while (1) b = IN(CS245);b +;硬件实验二 用 74LS273 扩展 I/O 口 extern unsigned char IN(unsigned int port); extern void OUT(unsigned int port, unsigned char v);#define CS273 0x8000void main()unsigned char i, b;while(1)b = 1;for (i=0; i<8; i+) OUT(CS273, b);b <<= 1;硬件实验三 方向灯控制实验 #define CS273 0x8000#define CS245 0xa000#define DelayCounter 4000#define ON 1#define OFF 0 extern unsigned char IN(unsigned int port);extern void OUT(unsigned int port, unsigned char v); unsigned char P1Buf;unsigned char Flash; void main()unsigned int FlashCounter;OUT(CS273,0);FlashCounter = DelayCounter;Flash = 0xff; while (1) OUT(CS273,(IN(CS245) & Flash); FlashCounter-;if (FlashCounter = 0) FlashCounter = DelayCounter;Flash = Flash;硬件实验四 PWM 转换电压实验/* 输出 50% (5:5) 占空比 PWM */ /* 输出 10% (1:9) 占空比 PWM */ /* 输出 90% (9:1) 占空比 PWM */extern unsigned char IN(unsigned int port); extern void OUT(unsigned int port, unsigned char v);#define CS273 0x8000void Delay(unsigned char CNT)unsigned char i;while (CNT-) for (i=0; i<50; i+) ;void main()while (1) OUT(CS273,1);Delay(1);OUT(CS273,0);Delay(9);硬件实验五 8253 计数器实验#define CONTROL 0x8003#define COUNT0 0x8000#define COUNT1 0x8001#define COUNT2 0x8002extern unsigned char IN(unsigned int port);extern void OUT(unsigned int port, unsigned char v);unsigned int i,j;void main()OUT(CONTROL, 0x30); /* counter0,16bit,mode 3,binary */ OUT(COUNT0, 0); /* low byte of counter */ OUT(COUNT0, 0); /* high byte of counter */ while(1)OUT(CONTROL, 0x0); /* counter1,16bit,mode 3,binary */i = IN(COUNT0); /* low byte of counter */i += IN(COUNT0)*256; /* high byte of counter */j = i ;硬件实验六 8259 外部中断实验#define CS273 0x8000 /* 273 输出地址 */ #define ICW1 0x13/* 单片 8259, 上升沿中断 , 要写 ICW4 */ #define ICW2 0x20/* 中断号为 20H */#define ICW4 0x01/*工作在 8086/88 方式 */#define OCW1 0xfe/*只响应 INT0 中断 */#define CS8259A 0xa000#define CS8259B 0xa001extern unsigned char IN(unsigned int port);extern void OUT(unsigned int port, unsigned char v);extern void DISABLE(void);extern void ENABLE(void);extern void SETINT(unsigned char NO, unsigned int *ENTER); unsigned char CNT;interrupt IEnter()CNT+;OUT(CS273, CNT);OUT(CS8259A, 0x20); /*中断服务程序结束指令 */void IInit()OUT(CS8259A, ICW1);OUT(CS8259B, ICW2);OUT(CS8259B, ICW4);OUT(CS8259B, OCW1);void main()DISABLE(); /* 关闭中断响应 */IInit();SETINT(ICW2, &IEnter); /*中断入口地址 */CNT = 0;OUT(CS273, CNT);ENABLE(); /*打开中断响应 */while (1); /*等待中断,并计数。 */;硬件实验七 8253 定时器实验#define CONTROL 0x8003#define COUNT0 0x8000#define COUNT1 0x8001#define COUNT2 0x8002extern unsigned char IN(unsigned int port); extern void OUT(unsigned int port, unsigned char v);void main()OUT(CONTROL, 0x36); /* 计数器 0,16 位 , 方式 3, 二进制 */OUT(COUNT0, 10000 % 256); /*计数器低字节 */OUT(COUNT0, 10000 / 256); /*计数器高字节 */OUT(CONTROL, 0x76); /* 计数器 1,16 位,方式 3, 二进制 */OUT(COUNT1, 100 ); /*计数器低字节 */OUT(COUNT1, 0); /*计数器高字节 */while (1) ;硬件实验八 D/A 转换实验#define CS0832 0x8000 extern unsigned char IN(unsigned int port); extern void OUT(unsigned int port, unsigned char v);unsigned char SinTbl9 = 0x00,0x18,0x30,0x46,0x59,0x69,0x75,0x7c,0x7f;void Write0832(unsigned char b)OUT(CS0832,b);/* unsigned char i; */void main()register i;产生锯齿波 */产生正弦波 */n /2)区间的波形*/n /2n )区间的波形*/n3 n /2)区间的波形*/n /22 n )区间的波形*/while(1)for(i=0; i<16; i+)/*Write0832(i*0x10);for(i=0; i<8; i+)/*Write0832(0x80 + SinTbli); /* (0 for(i=8; i>0; i-)Write0832(0x80 + SinTbli); /* ( for(i=0; i<8; i+)Write0832(0x80 - SinTbli); /* ( for(i=8; i>0; i-)Write0832(0x80 - SinTbli); /* (3;硬件实验九 A/D 转换实验#define CS0809 0x8000 extern unsigned char IN(unsigned int port); extern void OUT(unsigned int port, unsigned char v);unsigned char Read0809()起动 A/D */ 延时 > 100us */ 读入结果 */unsigned char i;OUT(CS0809, 0); /* for (i=0; i<0x40; i+) ; /* return(IN(CS0809); /* unsigned char b; void main(void) b = Read0809(); b +;硬件实验十8255 输入 /输出实验/*方式0, PA PC输出,PB输入*/#define mode 0x82#define PortA 0x8000 /* Port A */#define PortB 0x8001 /* Port B */#define PortC 0x8002 /* Port C */#define CAddr 0x8003 /* 控制字地址 */ extern unsigned char IN(unsigned int port); extern void OUT(unsigned int port, unsigned char v);unsigned char i,buf;void Delay(unsigned int CNT) while (CNT)CNT-;void main()while(1)OUT(CAddr, mode); /*输出控制字 */*实验 1: PortA 输出 */buf = 0x80;for(i=0; i<8; i+)OUT(PortA, buf); /*输出到A端口 */buf >>= 1; /*移位 */Delay(0x5000); /*延时 */;/* 实验 2: PortB 输入 PortA 输出 */ buf = IN(PortB); /*读入 PortB */OUT(PortA, buf); /*输出到 PortA */Delay(0x8000);硬件实验十一 八段数码管显示实验#define LEDLen 6#define OUTBIT 0xfe02#define CLK164 0xfe04#define DAT164 0xfe06extern unsigned char IN(unsigned int port);extern void OUT(unsigned int port, unsigned char v);unsigned char LEDBufLEDLen; /* 显示缓冲 */ unsigned char const LEDMAP = /* 八段管显示码 */ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;void Delay(unsigned char CNT)unsigned char i;while (CNT- !=0)for (i=100; i !=0; i-);void DisplayLED()unsigned char i, j, k;unsigned char Pos;unsigned char LED;Pos = 0x20; /*从左边开始显示 */for (i = 0; i < LEDLen; i+) OUT(OUTBIT,0); /* 关所有八段管 */LED = LEDBufi;for (j = 0; j < 8; j+) /*送 164 */if (LED & 0x80) OUT(DAT164, 1);else OUT(DAT164, 0);OUT(CLK164, 1);OUT(CLK164, 0);LED <<= 1;OUT(OUTBIT, Pos); /*显示一位八段管 */Delay(1);Pos >>= 1; /* 显示下一位 */void main()unsigned char i = 0;unsigned char j;while(1) LEDBuf0 = LEDMAP i & 0x0f;LEDBuf1 = LEDMAP(i+1) & 0x0f;LEDBuf2 = LEDMAP(i+2) & 0x0f;LEDBuf3 = LEDMAP(i+3) & 0x0f;LEDBuf4 = LEDMAP(i+4) & 0x0f;LEDBuf5 = LEDMAP(i+5) & 0x0f;i+;for(j=0; j<20; j+)DisplayLED(); /* 延时 */;硬件实验十二 键盘扫描显示实验#define LEDLen 6#define IN_KEY 0xfe00#define OUTBIT 0xfe02#define CLK164 0xfe04#define DAT164 0xfe06extern unsigned char IN(unsigned int port);extern void OUT(unsigned int port, unsigned char v);unsigned char LEDBufLEDLen; /* 显示缓冲 */ unsigned char const LEDMAP = /* 八段管显示码 */ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;unsigned char const KeyTable = /*键码定义 */0x16, 0x15, 0x14, 0xff,0x13, 0x12, 0x11, 0x10,0x0d, 0x0c, 0x0b, 0x0a,0x0e, 0x03, 0x06, 0x09,0x0f, 0x02, 0x05, 0x08,0x00, 0x01, 0x04, 0x07;void Delay(unsigned char CNT)unsigned char i;while (CNT- !=0)for (i=100; i !=0; i-);void DisplayLED()unsigned char i, j, k;unsigned char Pos;unsigned char LED;Pos = 0x20; /*从左边开始显示 */for (i = 0; i < LEDLen; i+) OUT(OUTBIT,0); /* 关所有八段管 */LED = LEDBufi;for (j = 0; j < 8; j+) /*送 164 */if (LED & 0x80) OUT(DAT164, 1);else OUT(DAT164, 0);OUT(CLK164, 1);OUT(CLK164, 0);LED <<= 1;OUT(OUTBIT, Pos); /*显示一位八段管 */Delay(1);Pos >>= 1; /* 显示下一位 */unsigned char TestKey()OUT(OUTBIT, 0); /*输出线置为 0 */return (IN(IN_KEY) & 0x0f); /*读入键状态 ( 高四位不用 ) */unsigned char GetKey()unsigned char Pos;unsigned char i;unsigned char j;unsigned char k;i = 6;Pos = 0x20; /* 找出键所在列 */do OUT(OUTBIT, Pos);Pos >>= 1;k = IN(IN_KEY) & 0x0f; while (-i != 0) && (k = 0);/* 键值 = 列 X 4 + 行 */if (k != 0) i *= 4;if (k & 2)i += 1;else if (k & 4)i += 2;else if (k & 8)i += 3;OUT(OUTBIT, 0);do Delay(10); while (TestKey(); /*等键释放 */return(KeyTablei); /* 取出键码 */ else return(0xff);void main()LEDBuf0 = 0xff;LEDBuf1 = 0xff;LEDBuf2 = 0xff;LEDBuf3 = 0xff;LEDBuf4 = 0x00;LEDBuf5 = 0x00;while (1) DisplayLED();if (TestKey() LEDBuf5 = LEDMAPGetKey() & 0x0f;#define LEDLen 6#define IN_KEY 0xfe00#define OUTBIT 0xfe02#define CLK164 0xfe04#define DAT164 0xfe06#define CS8251D 0x8000#define CS8251C 0x8001extern unsigned char IN(unsigned int port); extern void OUT(unsigned int port, unsigned char v);unsigned char LEDBufLEDLen; /* 显示缓冲 */unsigned char const LEDMAP = /* 八段管显示码 */0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;unsigned char const KeyTable = /*键码定义 */0x16, 0x15, 0x14, 0xff,0x13, 0x12, 0x11, 0x10,0x0d, 0x0c, 0x0b, 0x0a,0x0e, 0x03, 0x06, 0x09,0x0f, 0x02, 0x05, 0x08,0x00, 0x01, 0x04, 0x07;void Delay(unsigned char CNT) unsigned char i;while (CNT- !=0)for (i=100; i !=0; i-);void DisplayLED()unsigned char i, j, k; unsigned char Pos; unsigned char LED;Pos = 0x20; /*从左边开始显示 */for (i = 0; i < LEDLen; i+) OUT(OUTBIT,0); /* 关所有八段管 */LED = LEDBufi;for (j = 0; j < 8; j+) /*送 164 */if (LED & 0x80) OUT(DAT164, 1); else OUT(DAT164, 0);OUT(CLK164, 1);OUT(CLK164, 0);LED <<= 1;OUT(OUTBIT, Pos); /*显示一位八段管 */Delay(1);Pos >>= 1; /* 显示下一位 */unsigned char TestKey()OUT(OUTBIT, 0); /*输出线置为 0 */return (IN(IN_KEY) & 0x0f); /*读入键状态 ( 高四位不用 ) */unsigned char GetKey()unsigned char Pos;unsigned char i;unsigned char j;unsigned char k;i = 6;Pos = 0x20; /* 找出键所在列 */do OUT(OUTBIT, Pos);Pos >>= 1;k = IN(IN_KEY) & 0x0f; while (-i != 0) && (k = 0);/* 键值 = 列 X 4 + 行 */if (k != 0) i *= 4;if (k & 2) i += 1;else if (k & 4) i += 2;else if (k & 8) i += 3;OUT(OUTBIT, 0);do Delay(10); while (TestKey(); /*return(KeyTablei); /* else return(0xff);void IInit()OUT(CS8251C,0x4f); /* 1OUT(CS8251C,0x15); /*void Send(unsigned char TBuf)unsigned ss;OUT(CS8251C,0x15);/*while( !(IN(CS8251C) & 0x1); /*OUT(CS8251D,TBuf);/*unsigned char Receive()while( !(IN(CS8251C) & 0x2); /* return (IN(CS8251D); /* void main()unsigned char RCVBUF;IInit();LEDBuf0 = 0xff;LEDBuf1 = 0xff;LEDBuf2 = 0xff;LEDBuf3 = 0xff;LEDBuf4 = 0x00;LEDBuf5 = 0x00;等键释放 */取出键码 */停止位,无校验, 8 数据位 */ 清错误标志,允许接收发送 */清错误标志,允许接收发送 */ 发送缓冲是否为空 */ 送出数据库 */是否已收到数据 */ 读入数据 */while (1) DisplayLED(); /* if(!(IN(CS8251C) & 0x2) /* if (TestKey()/*Send(GetKey();/* elseRCVBUF = Receive(); /*LEDBuf5 = LEDMAPRCVBUF & 0x0f; /*LEDBuf4 = LEDMAPRCVBUF / 0x10; /* 显示 */是否收到数据 */如果有键按下 */ 则用串口输出 */已收到数据 */ 显示低 4 位 */ 显示高 4 位 */;硬件实验十四直流电机控制实验;硬件实验十五 电子琴#define CONTROL 0x8003#define COUNT0 0x8000#define COUNT1 0x8001#define COUNT2 0x8002#define IN_KEY 0xfe00#define OUTBIT 0xfe02extern unsigned char IN(unsigned int port); extern void OUT(unsigned int port, unsigned char v);unsigned int const ToneTable = 2273, 2024, 1805, 1704, 1517, 1353, 1205, 1136;unsigned char const KeyTable = /* 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, 0x0b, 0x0a, 0x0e, 0x03, 0x06, 0x09, 0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04, 0x07;unsigned char TestKey()OUT(OUTBIT, 0);/*return (IN(IN_KEY) & 0x0f); /*unsigned char GetKey()unsigned char Pos; unsigned char i;unsigned char j; unsigned char k;键码定义 */输出线置为 0 */读入键状态 ( 高四位不用 ) */i = 6;Pos = 0x20; /* 找出键所在列 */ do OUT(OUTBIT, Pos);Pos >>= 1;k = IN(IN_KEY) & 0x0f; while (-i != 0) && (k = 0);/* 键值 = 列 X 4 + 行 */if (k != 0) A if (k & 2)i += 1;else if (k & 4)i += 2;else if (k & 8)i += 3;return(KeyTablei); /* else return(0xff);取出键码 */void Delay(unsigned char CNT) unsigned char i;while (CNT- !=0)for (i=100; i !=0; i-); void OutTone(unsigned int Tone)OUT(CONTROL, 0x36); /* counter0,16bit,mode 3,binary */OUT(COUNT0, Tone % 256); /* low byte of counter */ OUT(COUNT0, Tone / 256); /* high byte of counter */ void main()unsigned char Key;unsigned int Tone;while (1) while (! TestKey() ; /*等按键 */Key = GetKey();if ( (Key >= 1) && (Key <= 8) ) Tone = ToneTableKey-1 ;OutTone(Tone);delay(600);OutTone(2);硬件实验十六 步进电机控制实验;硬件实验十七 空调温度控制实验#define LEDLen 6#define ADPort 0x8000 /* AD采样输入片选 */#define CS273 0xa000 /* 控制输出片选 */#define IN_KEY 0xfe00#define OUTBIT 0xfe02#define CLK164 0xfe04#define DAT164 0xfe06extern unsigned char IN(unsigned int port);extern void OUT(unsigned int port, unsigned char v);unsigned char LEDBufLEDLen; /* 显示缓冲 */unsigned char const LEDMAP = /* 八段管显示码 */0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0

    注意事项

    本文(伟福8051单机实例程式.docx)为本站会员(scccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开