




已阅读5页,还剩119页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课本C语言程序1. 图2.10 DA的转换器与单片机的连接/* 文件名:main.c* 芯片:AT89C52* 频率:12MHz* 功能描述:8位DA转换器DAC0832,双缓冲控制*/#include #include #defineucharunsigned char/*DAC0832地址,双缓冲所以有两级地址*/#defineDAC_0832_CSXBYTE0xFDFF/第一级#defineDAC_0832_XFERXBYTE0xFEFF/第二级/函数原型申明void Delay100ms(void);/* 函数名:main* 功能描述:main主程序* 输入参数:无 * 返回值:无 */void main(void)uchar i;while (1)for (i=0x00; i0; i-)for(j=20; j0; j-)for(k=130; k0; k-);2. 图2.20 ADC0808与单片机的中断接口方式/* * 文件名:main.c * 芯片:AT89C52 * 频率:12MHz * 功能描述:8位AD转换器ADC0808 */#include #include #defineucharunsigned char/*ADC0808地址*/#defineADC_0808XBYTE0xFF80/函数原型申明void InitInt0(void);void Delay10ms(void);/* * 函数名:main * 功能描述:main主程序 * 输入参数:无 * 返回值:无 */void main(void)InitInt0();while (1)ADC_0808 = 0x00;/启动AD转换Delay10ms();/显示延时/* * 函数名:InitInt0 * 功能描述:外部中断0初始化 * 输入参数:无 * 返回值:无 */void InitInt0(void)IT0 = 1;/边沿触发EX0 = 1;EA = 1;/* * 函数名:Int0 * 功能描述:外部中断0服务程序 * 输入参数:无 * 返回值:无 */void Int0(void) interrupt 0uchar result;result = ADC_0808;/读AD转换结果 P1 = result;/数字量送显示/* * 函数名:Delay10ms * 功能描述:10ms延时 * 输入参数:无 * 返回值:无 */void Delay10ms(void)uchar i, j, k; for(i=1; i0; i-) for(j=38; j0; j-) for(k=130; k0; k-);3. 图2.21 ADC0808与单片机的查询接口电路#include #include #define uchar unsigned char#define uint unsigned intuint addr = 0x7FF0;#define ADC_0808 XBYTEaddrsbit ADC_EOC = P17;void Delay500ms(void);void main() uchar result; uchar i, j; while (1) for (i=0; i256; i+) for (j=0; j 0x7FF7) addr = 0x7FF0; Delay500ms(); void Delay500ms(void) uchar i, j, k; for(i=23; i0; i-) for(j=152; j0; j-) for(k=70; k0; k-);4. 图2.12 12位DA转换器DAC1210与单片机的接口#include #include #define uint unsigned int#define uchar unsigned char#define DAC_1210_HIGHT8 XBYTE0x83FF #define DAC_1210_LOW4 XBYTE0x80FF void Delay5ms(void);void main(void)uint i; while (1) for (i=0x0000; i 4; DAC_1210_LOW4 = i & 0x000F; Delay5ms(); void Delay5ms(void) uchar i, j; for(i=19; i0; i-) for(j=130; j0; j-);5. 图2.25 AD1674与单片机接口电路/* * 文件名:main.c * 芯片:AT89C52 * 频率:12MHz * 功能描述:12位AD转换器AD1674 */#include #include #defineucharunsigned char/*AD1674地址*/#defineAD_1674XBYTE0x00FC/*AD1674的高8位数据地址*/#defineAD_1674_HIGHT8XBYTE0x00FE/*AD1674的低4位数据地址*/#defineAD_1674_LOW4XBYTE0x00FF/AD1674的STS引脚,转换结束STS输出一个低电平sbit STS = P10;/函数原型申明void Delay10ms(void);/* * 函数名:main * 功能描述:main主程序 * 输入参数:无 * 返回值:无 */void main(void)while (1)AD_1674 = 0x00;/启动AD转换while (STS);/等待AD转换结束P2 = AD_1674_HIGHT8;/读取高8位数字量并输出显示P1 = AD_1674_LOW4;/读取低4位数字量并输出显示Delay10ms();/显示延时/* * 函数名:Delay10ms * 功能描述:10ms延时 * 输入参数:无 * 返回值:无 */void Delay10ms(void)uchar i, j, k; for(i=1; i0; i-) for(j=38; j0; j-) for(k=130; k0; k-);6. 图3.4 操作功能键硬件连接图/* * 文件名 main.c * 芯片:AT89C52 * 主频:12MHZ * 功能描述:8键盘识别,利用中断,节省机时 */#include #include /预定义8155控制口和PA口#define CON_8155 XBYTE0XEF00 #define PA_8155 XBYTE0XEF01/* * 模块:中断服务子程序 * 功能:判断按键 * 输入参数:无 * 返回值:无 */ void main() IT0=1; /选择边沿触发方式EX0=1; /允许外部中断0EA=1; /指向键处理中断服务程序CON_8155=0x00; /8155初始化,PA口输入while(1); /* * 函数名:Key * 功能:外部中断0服务子程序,判断按键 * 输入参数:无 * 返回值:无 */void Key() interrupt 0 unsigned char i, j, k, temp; i=0x08; /设循环次数 j=0x00;/计数寄存器清零 k=PA_8155;/读入状态字 /移位判断 while(i-)0) temp=k&0x01; if(temp=0) break; j+; k=1; switch(j)/转到相应功能键入口 /分别转到8个功能键响应入口地址 case 0: P1=0xFE; break;case 1:P1=0xFD; break;case 2:P1=0xFB; break;case 3:P1=0xF7; break;case 4:P1=0xEF; break;case 5:P1=0xDF; break;case 6:P1=0xBF; break;case 7: P1=0x7F; break; 7. 图3.5 用8255A接口的4X8键盘矩阵/* * 文件名:4x8矩阵键盘.c * 芯片:Ateml89C52 * 主频:12MHz * 功能描述:4x8矩阵键盘扫描 */#include#include#include #define uint unsigned int#define uchar unsigned char/*8255各IO口和控制字地址*/#define PA_8255 XBYTE0x8000 #define PB_8255 XBYTE0x8100 #define PC_8255 XBYTE0x8200 #define CON_8255 XBYTE0x8300 /行列值uchar rowVal=0x00;uchar lineVal=0x00;/函数原型声明void KeyScan(void);void Delay10ms(void);/* * 函数名:main * 功能描述:main主函数 * 输入参数:无 * 返回值:无 */void main()uchar temp;uchar keyVal;CON_8255 = 0x90;/PA口工作于方式0,输入;PB口工作于方式0,输出while(1)P1 = 0x00;/行的送低电平temp = PA_8255;/读入列if(temp != 0xFF) Delay10ms();/消抖P1 = 0x00;temp = PA_8255;if(temp != 0xFF)rowVal = 0x00; /行列值清零lineVal = 0x00;KeyScan();keyVal=lineVal+rowVal;PB_8255=keyVal;/显示键值while(PA_8255!=0xFF);/等待按键释放/* * 函数名:KeyScan * 功能描述:有键按下时逐行扫描 * 输入参数:无 * 返回值:无 */void KeyScan()uchar temp, i, j;uchar rowShift = 0xFE;/逐行扫描for(i=0; i4; i+)P1 = rowShift;temp = PA_8255;if(temp != 0xFF)/此行有键按下/求列值for(j=0; j0; i-) for(j=38; j0; j-) for(k=130; k0; k-);8. 图3.34 6位动态显示电路/* * 文件名:LED动态扫描.c * 芯片:Ateml89C52 * 主频:12MHz * 功能描述:LED动态扫描 */#include #include #include #defineuintunsigned int#defineucharunsigned char/*8155控制字和PA,PB口地址定义*/#defineCON_8155XBYTE0x7F00#definePA_8155XBYTE0x7F01#definePB_8155XBYTE0x7F02/数码管字型定义uchar LEDDATA= 0x3F,/*0*/ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ 0x6F,/*9*/ 0x77,/*A*/ 0x7C,/*b*/ 0x39,/*C*/ 0x5E,/*d*/ 0x79,/*E*/ 0x71,/*F*/ ;/动态扫描时间间隔50ms标志位bit g_delay50ms = 0;/函数原型声明void Delay1ms(void);void Delay50ms(void);/* * 函数名:main * 功能描述:动态显示数字 * 输入参数:无 * 返回值:无 */void main()uchar i, selectLED;IT0 = 1;/外部中断0,边沿触发EX0 = 1;EA = 1;CON_8155 = 0x03;/PA口、PB口基本输入输出selectLED = 0x20;/LED位选,从左到右扫描while(1)for(i=1; i0; i-) for(j=142; j0; j-) for(k=2; k0; k-);/* * 函数名:Delay50ms * 功能描述:50ms延时 * 输入参数:无 * 返回值:无 */void Delay50ms(void) unsigned char a,b; for(b=173;b0;b-) for(a=143;a0;a-);9. 图3.36 具有串行接口的动态显示电路/* * 文件名:串行接口的LED动态扫描.c * 芯片:Ateml89C52 * 主频:12MHz * 功能描述:串行接口的LED动态扫描 */#include #include#defineuintunsigned int#defineucharunsigned char/数码管字型定义uchar LEDDATA= 0x3F,/*0*/ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ 0x6F,/*9*/ 0x77,/*A*/ 0x7C,/*b*/ 0x39,/*C*/ 0x5E,/*d*/ 0x79,/*E*/ 0x71,/*F*/ ;/动态扫描时间间隔50ms标志位bit g_delay50ms = 0;/函数声明void Delay1ms(void);void Delay50ms(void);/* * 函数名:main * 功能描述:串行接口的动态显示数字 * 输入参数:无 * 返回值:无 */void main()uchar i=1;/LEDDATAi,数码管显示uchar selectLED=0x01;/LED位选,从右到左扫描IT0 = 1;/外部中断0,边沿触发EX0 = 1;EA = 1;SCON=0x00; /串口工作方式0while(1)SBUF=LEDDATAi;/输出显示码while(!TI);TI=0;P1=selectLED;/送扫描位选信号/准备显示下一位i+;if(i=7)i=1;selectLED=_crol_(selectLED,1);/指向下一位数if(selectLED=0x40)selectLED=0x01;if (g_delay50ms)Delay50ms();/动态扫描时间间隔50mselseDelay1ms();/动态扫描时间间隔1msP1=0x00;/消隐/* * 函数名:Int0 * 功能描述:外部中断0服务程序,响应时间切换按键 * 输入参数:无 * 返回值:无 */void Int0(void) interrupt 0g_delay50ms = !g_delay50ms;/* * 函数名:Delay1ms * 功能描述:1ms延时 * 输入参数:无 * 返回值:无 */void Delay1ms(void)uchar i, j, k; for(i=1; i0; i-) for(j=142; j0; j-) for(k=2; k0; k-);/* * 函数名:Delay50ms * 功能描述:50ms延时 * 输入参数:无 * 返回值:无 */void Delay50ms(void) unsigned char a,b; for(b=173;b0;b-) for(a=143;a0;a-);11. 图3.37 用锁存器连接的6位静态显示电路 /* * 文件名:LED静态扫描.c * 芯片:Ateml89C52 * 主频:12MHz * 功能描述:LED静态扫描 */#include #defineuintunsigned int#defineucharunsigned char/数码管字型定义uchar LEDDATA= 0x3F,/*0*/ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ 0x6F,/*9*/ 0x77,/*A*/ 0x7C,/*b*/ 0x39,/*C*/ 0x5E,/*d*/ 0x79,/*E*/ 0x71,/*F*/ ;/* * 函数名:main * 功能描述:静态显示数字 * 输入参数:无 * 返回值:无 */void main()uchar temp,i;temp=0x40;for(i=1;i7;i+)P0=LEDDATAi;P2=temp;/锁存器OE=1;P2=0x4F;/锁存器OE=0;if(temp=0x46)temp=0x40;temp+;while(1);12. 图3.43 88 LED点阵显示器与单片机接口电路图/* * 文件名:8x8led.c * 芯片:Ateml89C52 * 主频:12MHz * 功能描述:8x8LED显示从0到9数据 */#include #defineuintunsigned int#defineucharunsigned char/列选通uchar code g_lineStrobe=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/数字字模,10个数字09,每个数字8个字节uchar code g_digit108= 0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00, /0 0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00, /10x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00, /20x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00, /30x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00, /40x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00, /50x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00, /60x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00, /70x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00, /80x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00, /9 ;/数字字模指针 uchar g_point=0; /第几个字符 uchar g_nDigit=0;/定时器定时次数uchar g_tCount = 0; /* * 函数名:main * 功能描述:main主函数 * 输入参数:无 * 返回值:无 */void main(void) TMOD=0x01; /定时器0方式1 TH0=(65536-5000)/256; /设置定时计数初值,5msTL0=(65536-5000)%256; TR0=1; ET0=1; /打开定时器0中断 EA=1; while(1); /* * 函数名:Timer0Int * 功能描述:定时器0中断服务程序,5ms中断一次,扫描一列 * 输入参数:无 * 返回值:无 */void Timer0Int(void) interrupt 1TH0=(65536-5000)/256; TL0=(65536-5000)%256; P3=g_lineStrobeg_point; /列选通 P0=g_digitg_nDigitg_point; /行,送数字字模 g_point+; if(g_point=8) g_point=0; g_tCount+;if (g_tCount = 40)/定时40次,200ms,每个数字显示200msg_tCount = 0;g_nDigit+;/准备显示下一个数字if (g_nDigit = 10)g_nDigit = 0; 12. 图3.44 1616 LED 点阵显示器电路/* * 文件名 LED.c * 芯片:AT89C52 * 主频:12MHZ * 功能描述:16x16LED点阵显示 */#include #include /要显示的字码char code TABLE32=0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,/电0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,0x00,0xFE,0x42,0xC2,0x42,0x7F,0x12,0x08,/路0x8C,0x57,0x24,0x54,0x8C,0x84,0x80,0x00,0x40,0x7E,0x40,0x3F,0x22,0x22,0x01,0xFF,0x42,0x42,0x42,0x42,0x42,0xFF,0x02,0x00,0x00,0xFE,0x02,0x22,0x12,0x1E,0xAA,0x4A,/图0xAA,0x1A,0x0A,0x02,0x02,0xFF,0x02,0x00,0x00,0xFF,0x44,0x44,0x42,0x49,0x49,0x52,0x64,0x41,0x42,0x46,0x42,0xFF,0x00,0x00, ;/函数原型申明void delay1ms(void);/* * 函数名:main * 功能:程序入口 * 输入参数:无 * 输出参数:无 */void main()int i,j,k;char lie; /列值变量while(1)P0=0X00; /清除P0口P2=0X00; /清除P2口for(j=0;j3;j+)for(k=0;k20;k+)lie=0x00;for(i=0;i0;c-) for(b=142;b0;b-) for(a=2;a0;a-);13. 图3.61 MGLS-12864显示模块控制图/* * 文件名 LED.c * 芯片:AT89C52 * 主频:12MHZ * 功能描述:12864LCD显示 */#include #include /汉字字模char code TABLE32=/*- 文字: 量 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00,/*- 文字: 程 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,/*- 文字: 调 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x20,0x21,0xEE,0x04,0x00,0x00,0xFF,0x29,0xA9,0xBF,0xA9,0xA9,0x01,0xFF,0x00,0x00,0x00,0x00,0x1F,0x88,0x44,0x30,0x0F,0x00,0x0F,0x04,0x04,0x4F,0x80,0x7F,0x00,0x00,/*- 文字: 整 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x04,0x74,0xD4,0xFF,0xD4,0x74,0x04,0x10,0x0C,0xB7,0x44,0xB4,0x0C,0x04,0x00,0x00,0x42,0x43,0x7A,0x43,0x42,0x43,0x7E,0x4B,0x4B,0x4A,0x4A,0x42,0x43,0x01,0x00,;/数字char code TABLENUM16= 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/0 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/1 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/2 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/5 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/9 ;/LCD地址定义#define CWADD1 XBYTE0xe000 /写指令代码地址(左)#define CRADD1 XBYTE0xe800 /读状态字地址 (左)#define DWADD1 XBYTE0xe400 /写显示数据地址(左)#define DRADD1 XBYTE0xec00 /读显示数据地址(左)#define CWADD2 XBYTE0xf000 /写指令代码地址(右)#define CRADD2 XBYTE0xf800 /读状态字地址 (右)#define DWADD2 XBYTE0xf400 /写显示数据地址(右)#define DRADD2 XBYTE0xfc00 /读显示数据地址(右)/函数原型申明void PRL0(unsigned char a);void PRL1(unsigned char a);void PRL1(unsigned char a);void PRR1(unsigned char b);void INIT();void INITN();void Clear();void DIS(unsigned char c,unsigned char p,int e);void DIS_CW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年食品与饮料行业餐饮业数字化转型研究报告
- 2025年事业单位工勤技能-河南-河南机械热加工三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-河南-河南假肢制作装配工三级(高级工)历年参考题库典型考点含答案解析
- 2024版单位车辆出租合同
- 2025年事业单位工勤技能-江西-江西热力运行工四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江西-江西土建施工人员五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏热处理工一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-新疆-新疆舞台技术工三级(高级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西殡葬服务工三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西家禽饲养员一级(高级技师)历年参考题库含答案解析
- 培训完总结做个课件
- 幼儿园6S管理培训
- 2025年高考江苏卷物理真题(解析版)
- 肇庆辅警考试题库2025(有答案)
- 医院关于开展整治重复医疗检查检验、违规收费问题工作实施方案的通知
- 中医高热护理常规
- 人员密集场所管理制度
- 单轨吊轨道安装安全技术措施
- 供应商黑名单管理制度
- 高端数控机床智能化控制系统研发项目可行性研究报告
- 2025年河南郑州航空港发展投资集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论