I2C总线协议 主函数
初始化 根据相应的wave值进入相应的if语句 wave=1 wave=2 wave=3 输出三角波液晶显示 输出正弦波液晶显示 输出方波液晶显示 图(7)软件的流程图
部分程序代码: hnh.c文件:
#include
#define uchar unsigned char #define uint unsigned int #define _Nop() _nop_()
#define AddW 0x90 #define AddR 0x91
sbit SDA=P2^0; sbit SCL=P2^1;
sbit key1=P3^2; sbit key2=P3^3; sbit key3=P3^4; sbit key4=P3^5; sbit key5=P3^6;
bit back;
uchar wave=0; uchar f=1; uchar A1=10; uchar A2=1; uint num=0;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,};
unsigned char code fangbo[]=
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,} ;
unsigned char code sanjiao[]
={ 0,4,8,12,16,20,24,28,32,36,40,44,48,52,56, 60,64,68,72,76,80,84,88,92,96,100,104, 108,112,116,120,124,128,124,120,116,112, 108,104,100,96,92,88,84,80,76,72,68,64,
60,56,52,48,44,40,36,32,28,24,20,16,12,8,4,0,};
unsigned char code sin[]
={135,145,158,167,176,188,199,209,218,226, 234,240,245,249,252,254,254,253,251,247, 243,237,230,222,213,204,193,182,170,158, 146,133,121,108,96,84,72,61,50,41,32,24, 17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66, 78,90,102,114,128 } ;
void delay1(uint z) {
uint x,y; for(x=z;x>0;x--) for(y=60;y>0;y--); }
void Start_I2c()
共阴 //
{
SDA=1; _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); _Nop(); SDA=0; _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; _Nop(); _Nop();
} //结束总线
void Stop_I2c() {
SDA=0; _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; _Nop(); _Nop(); _Nop(); _Nop(); }
void SendByte(uchar c) {
unsigned char Bit; for(Bit=0;Bit<8;Bit++) { if((c< //发送字节函数 //要传送的数据长度为8位 //判断发送位 SDA=0; _Nop(); SCL=1; //置时钟线为高 ,通知被控器开始接收数据位 _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; } _Nop(); _Nop(); SDA=1; _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA==1) back=0; else back=1; SCL=0; _Nop(); _Nop(); } bit WriteDAC(uchar dat, uchar num) { unsigned char i; Start_I2c(); SendByte(AddW); if(back==0) return(0); SendByte(0x40); if(back==0) return(0); for(i=0;i Stop_I2c(); } void keys() { if(key1==0) { delay1(10); if(key1==0) { num++; while(!key1); wave++; if(wave==4) { wave=1; num=1; } P1=table[num]; } } } void keys1() { if(key2==0) { delay1(10); if(key2==0) { while(!key2); f++; if(f>500) f=500; } } if(key3==0) { delay1(10); if(key3==0) { while(!key3); if(f>1) f--;